<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:og="http://ogp.me/ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:schema="http://schema.org/" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:sioct="http://rdfs.org/sioc/types#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" version="2.0" xml:base="http://badzilla.co.uk/">
  <channel>
    <title>Drupal 6</title>
    <link>http://badzilla.co.uk/</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>Drupal 8 and DRUD Tech's ddev Local Development Environment</title>
  <link>http://badzilla.co.uk/drupal-8-and-drud-techs-ddev-local-development-environment</link>
  <description>
&lt;span&gt;Drupal 8 and DRUD Tech's ddev Local Development Environment&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Sat, 10/03/2018 - 21:12&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.40.36.png?itok=RMPUTXj1 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.40.36.png?itok=Z0gmcixg 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.40.36.png?itok=JHQH5DPa 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.40.36.png?itok=IN5xeixh 2294w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.40.36.png?itok=RMPUTXj1" alt="Command Line" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;My favourite presentation at DrupalCamp London 2018 was &lt;strong&gt;Turbocharge Your Agency&lt;/strong&gt; given by DRUD Tech co-founder Kevin Bridges and Jeffrey A. "jam" McGuire. They talked at length about the container solution &lt;strong&gt;ddev&lt;/strong&gt; which enables developers to manage their local environments and thus optimise their time and in addition save their configuration under source control. Furthermore the demonstration showed that it was possible to flip between different configurations with different Drupal versions easily and quickly. The solution found &lt;a href="https://github.com/drud/ddev"&gt;here&lt;/a&gt; uses Docker and is wrapped by the lightning fast Golang.&lt;/p&gt;
&lt;p&gt;I've been thinking for a while about moving from my existing hand crafted Virtual Machine towards Docker. My VM's configuration isn't under source control management, and has built up over the years into quite a complex beast. I have Jenkins, phing, composer, Drupal console, Mail Catcher, Compass, node, npm, Python, nginx, Apache, MariaDB and MongoDB that I can remember off the top of my head. It's becoming a difficult proposition to keep it all working. When I need to run a different version of PHP I manually switch simlinks around. Oh for something easier. &lt;/p&gt;
&lt;p&gt;So I elected to investigate whether Drud Tech's offering could possibly help out. The demonstration given by their guys at DrupalCamp London 2018 showed the ease of moving between D7 and D8 repos. However they were fresh builds and for the tool to be of value to me, it would have to work from pre-existing codebases. &lt;/p&gt;
&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Installing a VirtualBox VM&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-05%20at%2021.41.04.png?itok=YLavAD3q 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-05%20at%2021.41.04.png?itok=p9TxKiLl 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-05%20at%2021.41.04.png?itok=kWThqz1Q 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-05%20at%2021.41.04.png?itok=GhAKBne5 1764w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-05%20at%2021.41.04.png?itok=YLavAD3q" alt="ddev VM" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.01.38.png?itok=fR6uv1yE 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.01.38.png?itok=5GkmA5Mt 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.01.38.png?itok=oYLUJWwI 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.01.38.png?itok=FgT36KcJ 1768w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.01.38.png?itok=fR6uv1yE" alt="ifconfig" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.06.05.png?itok=4NUDSvv6 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.06.05.png?itok=QwIRA5Ls 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.06.05.png?itok=J1ySsudd 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.06.05.png?itok=quF2Q4GI 1526w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-05%20at%2022.06.05.png?itok=4NUDSvv6" alt="ssh port forward" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;This was purely a Proof of Concept so as a consequence I needed to keep anything I did in a ring-fenced environment. Therefore a VirtualBox Ubuntu 16.04LTS image was used as a starting point. I won't provide screenshots of the entire build process since I have previous blogs to cover this. &lt;/p&gt;

&lt;p&gt;Once the build has completed and I have logged in I issue a &lt;em&gt;ifconfig&lt;/em&gt; command to determine the IP address which is 10.0.2.15 (second screenshot). This will need to be used with the network configuration. &lt;/p&gt;

&lt;p&gt;When I was building the VM I kept the default network configuration which is NAT. I have moved away from using Bridged Adapter. A bridged adapter on the face of it is very convenient - it automatically gets an IP address via DHCP from my ISP provided router at home, in the 192.168.0.0 range. However this falls foul at client sites with security policies prohibiting unknown MAC Addresses, and Internet cafes that don't use the same IP range - it simply won't work. &lt;/p&gt;

&lt;p&gt;The solution is to use NAT and use the port forwarding facility. Navigate to &lt;em&gt;Settings -&gt; Network -&gt; Advanced -&gt; Port Forwarding&lt;/em&gt; and add values for ssh as per the third screenshot above.  &lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;I can now ssh into the ddev VM. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;ssh&lt;/span&gt; &lt;span style="color: #660033;"&gt;-p&lt;/span&gt; &lt;span style="color: #000000;"&gt;2222&lt;/span&gt; nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;127.0.0.1
The authenticity of host &lt;span style="color: #ff0000;"&gt;'[127.0.0.1]:2222 ([127.0.0.1]:2222)'&lt;/span&gt; can&lt;span style="color: #ff0000;"&gt;'t be established.
ECDSA key fingerprint is SHA256:VRNxWpagSl2DGz7dmgRjBqdDdadXITdPPkItrMR9k38.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;127.0.0.1&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;:&lt;span style="color: #000000;"&gt;2222&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;' (ECDSA) to the list of known hosts.
nigel@127.0.0.1'&lt;/span&gt;s password: 
Welcome to Ubuntu 16.04.3 LTS &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;GNU&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;Linux 4.4.0-&lt;span style="color: #000000;"&gt;87&lt;/span&gt;-generic x86_64&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;
 
 &lt;span style="color: #000000; font-weight: bold;"&gt;*&lt;/span&gt; Documentation:  https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;help.ubuntu.com
 &lt;span style="color: #000000; font-weight: bold;"&gt;*&lt;/span&gt; Management:     https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;landscape.canonical.com
 &lt;span style="color: #000000; font-weight: bold;"&gt;*&lt;/span&gt; Support:        https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;advantage
 
&lt;span style="color: #000000;"&gt;137&lt;/span&gt; packages can be updated.
&lt;span style="color: #000000;"&gt;69&lt;/span&gt; updates are security updates.
 
 
Last login: Mon Mar  &lt;span style="color: #000000;"&gt;5&lt;/span&gt; &lt;span style="color: #000000;"&gt;21&lt;/span&gt;:&lt;span style="color: #000000;"&gt;50&lt;/span&gt;:&lt;span style="color: #000000;"&gt;35&lt;/span&gt; &lt;span style="color: #000000;"&gt;2018&lt;/span&gt;
To run a &lt;span style="color: #7a0874; font-weight: bold;"&gt;command&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;as&lt;/span&gt; administrator &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;user &lt;span style="color: #ff0000;"&gt;"root"&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;, use &lt;span style="color: #ff0000;"&gt;"sudo &lt;command&gt;"&lt;/span&gt;.
See &lt;span style="color: #ff0000;"&gt;"man sudo_root"&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; details.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Install Docker&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;Don't be tempted to install the Docker version that is bundled in the Ubuntu default repos. Follow the instructions on the Docker site for installing the CE version of Docker from their private repo. &lt;br /&gt;&lt;br /&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-get update&lt;/span&gt;
&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; password &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; nigel: 
Hit:&lt;span style="color: #000000;"&gt;1&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;security.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-security InRelease
Hit:&lt;span style="color: #000000;"&gt;2&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial InRelease
Hit:&lt;span style="color: #000000;"&gt;3&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-updates InRelease
Hit:&lt;span style="color: #000000;"&gt;4&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-backports InRelease
Reading package lists... Done &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Install packages to allow apt to use a repository over HTTPS
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-get install&lt;/span&gt; \
&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;     apt-transport-https \
&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;     ca-certificates \
&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;     curl \
&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;     software-properties-common
Reading package lists... Done
Building dependency &lt;span style="color: #c20cb9; font-weight: bold;"&gt;tree&lt;/span&gt;       
Reading state information... Done
apt-transport-https is already the newest version &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;1.2.25&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;.
ca-certificates is already the newest version &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;20170717&lt;/span&gt;~16.04.1&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;.
curl is already the newest version &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;7.47.0-1ubuntu2.6&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;.
software-properties-common is already the newest version &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;0.96.20.7&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;.
&lt;span style="color: #000000;"&gt;0&lt;/span&gt; to upgrade, &lt;span style="color: #000000;"&gt;0&lt;/span&gt; to newly &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt;, &lt;span style="color: #000000;"&gt;0&lt;/span&gt; to remove and &lt;span style="color: #000000;"&gt;2&lt;/span&gt; not to upgrade.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
That's good. Nothing to do there. Now let's add Docker’s official GPG key:
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;curl &lt;span style="color: #660033;"&gt;-fsSL&lt;/span&gt; https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;download.docker.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;linux&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;gpg &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-key add&lt;/span&gt; -
OK&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Now I need to verify that we have the key with the fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, by searching for the last 8 characters of the fingerprint.
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-key&lt;/span&gt; fingerprint 0EBFCD88
pub   4096R&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;0EBFCD88 &lt;span style="color: #000000;"&gt;2017&lt;/span&gt;-02-&lt;span style="color: #000000;"&gt;22&lt;/span&gt;
      Key fingerprint = 9DC8 &lt;span style="color: #000000;"&gt;5822&lt;/span&gt; 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;CE deb&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;docker&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;docker.com&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
sub   4096R&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;F273FCD8 &lt;span style="color: #000000;"&gt;2017&lt;/span&gt;-02-&lt;span style="color: #000000;"&gt;22&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
All good. Next the following command to set up the stable repository.
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; add-apt-repository \
&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;    &lt;span style="color: #ff0000;"&gt;"deb [arch=amd64] https://download.docker.com/linux/ubuntu &lt;span style="color: #000099; font-weight: bold;"&gt;\
&lt;/span&gt;&gt;    &lt;span style="color: #007800;"&gt;$(lsb_release -cs)&lt;/span&gt; &lt;span style="color: #000099; font-weight: bold;"&gt;\
&lt;/span&gt;&gt;    stable"&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Update apt again
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-get update&lt;/span&gt;
Hit:&lt;span style="color: #000000;"&gt;1&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;security.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-security InRelease
Hit:&lt;span style="color: #000000;"&gt;2&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial InRelease
Hit:&lt;span style="color: #000000;"&gt;3&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-updates InRelease
Hit:&lt;span style="color: #000000;"&gt;4&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-backports InRelease
Get:&lt;span style="color: #000000;"&gt;5&lt;/span&gt; https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;download.docker.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;linux&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial InRelease &lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;65.8&lt;/span&gt; kB&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;
Get:&lt;span style="color: #000000;"&gt;6&lt;/span&gt; https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;download.docker.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;linux&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;stable amd64 Packages &lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;,&lt;span style="color: #000000;"&gt;329&lt;/span&gt; B&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;
Fetched &lt;span style="color: #000000;"&gt;69.1&lt;/span&gt; kB &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; 0s &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;140&lt;/span&gt; kB&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;s&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;
Reading package lists... Done&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Again we are looking good - we can see it's picked up the Docker repo ok. Let's install the latest version of Docker. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-get update&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Let's check it's working..
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; docker run hello-world
&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; password &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; nigel: 
Unable to &lt;span style="color: #c20cb9; font-weight: bold;"&gt;find&lt;/span&gt; image &lt;span style="color: #ff0000;"&gt;'hello-world:latest'&lt;/span&gt; locally
latest: Pulling from library&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;hello-world
ca4f61b1923c: Pull &lt;span style="color: #7a0874; font-weight: bold;"&gt;complete&lt;/span&gt; 
Digest: sha256:083de497cff944f969d8499ab94f07134c50bcf5e6b9559b27182d3fa80ce3f7
Status: Downloaded newer image &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; hello-world:latest
 
Hello from Docker&lt;span style="color: #000000; font-weight: bold;"&gt;!&lt;/span&gt;
This message shows that your installation appears to be working correctly.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Success! Now we need docker-compose installing. Again, don't be tempted to install from the standard Ubuntu repos, because if you do with Ubuntu 16.04LTS you'll end up with docker-compose version 1.8.0 which does not meet the ddev requirements. So do it the proper way!
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; curl &lt;span style="color: #660033;"&gt;-L&lt;/span&gt; https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;github.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docker&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;compose&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;releases&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;download&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;1.19.0&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docker-compose-&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;uname&lt;/span&gt; -s&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;uname&lt;/span&gt; -m&lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt; &lt;span style="color: #660033;"&gt;-o&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docker-compose
  &lt;span style="color: #000000; font-weight: bold;"&gt;%&lt;/span&gt; Total    &lt;span style="color: #000000; font-weight: bold;"&gt;%&lt;/span&gt; Received &lt;span style="color: #000000; font-weight: bold;"&gt;%&lt;/span&gt; Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
&lt;span style="color: #000000;"&gt;100&lt;/span&gt;   &lt;span style="color: #000000;"&gt;617&lt;/span&gt;    &lt;span style="color: #000000;"&gt;0&lt;/span&gt;   &lt;span style="color: #000000;"&gt;617&lt;/span&gt;    &lt;span style="color: #000000;"&gt;0&lt;/span&gt;     &lt;span style="color: #000000;"&gt;0&lt;/span&gt;    &lt;span style="color: #000000;"&gt;795&lt;/span&gt;      &lt;span style="color: #000000;"&gt;0&lt;/span&gt; --:--:-- --:--:-- --:--:--   &lt;span style="color: #000000;"&gt;795&lt;/span&gt;
&lt;span style="color: #000000;"&gt;100&lt;/span&gt; 8288k  &lt;span style="color: #000000;"&gt;100&lt;/span&gt; 8288k    &lt;span style="color: #000000;"&gt;0&lt;/span&gt;     &lt;span style="color: #000000;"&gt;0&lt;/span&gt;   355k      &lt;span style="color: #000000;"&gt;0&lt;/span&gt;  &lt;span style="color: #000000;"&gt;0&lt;/span&gt;:00:&lt;span style="color: #000000;"&gt;23&lt;/span&gt;  &lt;span style="color: #000000;"&gt;0&lt;/span&gt;:00:&lt;span style="color: #000000;"&gt;23&lt;/span&gt; --:--:--  196k&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Now make it executable
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;chmod&lt;/span&gt; +x &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docker-compose&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Let's see the version
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;docker-compose &lt;span style="color: #660033;"&gt;--version&lt;/span&gt;
docker-compose version 1.19.0, build 9e633ef&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Neat! We are almost there. Now we need to make sure Docker starts every time we boot the machine.
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; systemctl &lt;span style="color: #7a0874; font-weight: bold;"&gt;enable&lt;/span&gt; docker
Synchronizing state of docker.service with SysV init with &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;lib&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;systemd&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;systemd-sysv-install...
Executing &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;lib&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;systemd&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;systemd-sysv-install &lt;span style="color: #7a0874; font-weight: bold;"&gt;enable&lt;/span&gt; docker&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Before I am done here, I need to add myself to the Docker group so I can execute Docker commands (or rather ddev can on my behalf)
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~/projects/meedjum$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; usermod &lt;span style="color: #660033;"&gt;-aG&lt;/span&gt; docker $&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;whoami&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Rebooting will now serve two purposes - check that the above command works which will start Docker, and make sure my new group status has been picked up. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;su&lt;/span&gt;
root&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;home&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #666666; font-style: italic;"&gt;# init 6&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Installing ddev&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;There are two ways of installing ddev - by downloading from the repository's &lt;a href="https://github.com/drud/ddev/releases"&gt;releases&lt;/a&gt; - or use the install script in the &lt;a href="https://ddev.readthedocs.io/en/latest/"&gt;ddev&lt;/a&gt; documentation. I opted for the latter. &lt;/p&gt;
&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;curl https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;raw.githubusercontent.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;drud&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ddev&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;master&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;install_ddev.sh &lt;span style="color: #000000; font-weight: bold;"&gt;|&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;bash&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;%&lt;/span&gt; Total    &lt;span style="color: #000000; font-weight: bold;"&gt;%&lt;/span&gt; Received &lt;span style="color: #000000; font-weight: bold;"&gt;%&lt;/span&gt; Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
&lt;span style="color: #000000;"&gt;100&lt;/span&gt;  &lt;span style="color: #000000;"&gt;2545&lt;/span&gt;  &lt;span style="color: #000000;"&gt;100&lt;/span&gt;  &lt;span style="color: #000000;"&gt;2545&lt;/span&gt;    &lt;span style="color: #000000;"&gt;0&lt;/span&gt;     &lt;span style="color: #000000;"&gt;0&lt;/span&gt;   &lt;span style="color: #000000;"&gt;5821&lt;/span&gt;      &lt;span style="color: #000000;"&gt;0&lt;/span&gt; --:--:-- --:--:-- --:--:--  &lt;span style="color: #000000;"&gt;5823&lt;/span&gt;
ddev_linux.v0.15.0.tar.gz: OK
Download verified. Ready to place ddev &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; your &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin.
Running &lt;span style="color: #ff0000;"&gt;"sudo mv /tmp/ddev /usr/local/bin/"&lt;/span&gt; Please enter your password &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; prompted.
&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; password &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; nigel: 
Bash completion &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; ddev was not installed. You may manually &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tmp&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ddev_bash_completion.sh &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; your bash_completions.d directory.
ddev is now installed. Run &lt;span style="color: #ff0000;"&gt;"ddev"&lt;/span&gt; to verify your installation and see usage.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Installed - now check our installation
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;ddev
This Command Line Interface &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;CLI&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt; gives you the ability to interact with the ddev to create a development environment.
 
Usage:
  ddev &lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;command&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;
 
Available Commands:
  auth-pantheon Provide a machine token &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; the global pantheon auth.
  config        Create or modify a ddev project configuration &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; the current directory
  describe      Get a detailed description of a running ddev project.
  &lt;span style="color: #7a0874; font-weight: bold;"&gt;exec&lt;/span&gt;          Execute a shell &lt;span style="color: #7a0874; font-weight: bold;"&gt;command&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; the container &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; a service. Uses the web service by default.
  &lt;span style="color: #7a0874; font-weight: bold;"&gt;help&lt;/span&gt;          Help about any &lt;span style="color: #7a0874; font-weight: bold;"&gt;command&lt;/span&gt;
  &lt;span style="color: #c20cb9; font-weight: bold;"&gt;hostname&lt;/span&gt;      Manage your hostfile entries.
  import-db     Import the database of an existing project to the dev environment.
  import-files  Import the uploaded files directory of an existing project to the default public upload directory of your project.
  list          List projects
  logs          Get the logs from your running services.
  pull          Import files and database using a configured provider plugin.
  remove        Remove the development environment &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; a project.
  restart       Restart the development environment &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; a project.
  &lt;span style="color: #c20cb9; font-weight: bold;"&gt;ssh&lt;/span&gt;           Starts a shell session &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; the container &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; a service. Uses web service by default.
  start         Start a ddev project.
  stop          Stop the development environment &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; a project.
  version       print ddev version and component versions
 
Flags:
  -h, &lt;span style="color: #660033;"&gt;--help&lt;/span&gt;          &lt;span style="color: #7a0874; font-weight: bold;"&gt;help&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; ddev
  -j, &lt;span style="color: #660033;"&gt;--json-output&lt;/span&gt;   If &lt;span style="color: #c20cb9; font-weight: bold;"&gt;true&lt;/span&gt;, user-oriented output will be &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; JSON format.
 
Use &lt;span style="color: #ff0000;"&gt;"ddev [command] --help"&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;more&lt;/span&gt; information about a command.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
We have it!&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Getting Started with an Existing Drupal 8 Project&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;This blog has been built using Drupal 8 - so it made sense to use this for my first project. Let's create a directory for my projects and git clone. At this point I had already created a new .ssh key for my ddev VM and added it to my GitHub profile.
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;mkdir&lt;/span&gt; projects
&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;cd&lt;/span&gt; projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;
nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;git clone&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;git&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;github.com:sanddevil&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum.git
Cloning into &lt;span style="color: #ff0000;"&gt;'meedjum'&lt;/span&gt;...&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Now let's cd into the project and config ddev for our Drupal 8 through its interactive shell. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum$ ddev config
Creating a new ddev project config &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; the current directory &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;home&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt; 
Once completed, your configuration will be written to &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;home&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;.ddev&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;config.yaml
 
Project name &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;meedjum&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;: 
 
The docroot is the directory from &lt;span style="color: #c20cb9; font-weight: bold;"&gt;which&lt;/span&gt; your site is served. This is a relative path from your project root &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;home&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt; 
You may leave this value blank &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; your site files are &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; the project root 
Docroot Location &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;docroot&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;: 
Found a php codebase at &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;home&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot. 
Project Type &lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;php, drupal6, drupal7, drupal8, wordpress, typo3, backdrop&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;php&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;: drupal8
Configuration complete. You may now run &lt;span style="color: #ff0000;"&gt;'ddev start'&lt;/span&gt;. &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
ddev is suggesting I should run start, so why not?
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum$ ddev start
Network ddev_default created 
Starting environment &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; meedjum... 
ddev needs to add an entry to your hostfile.
It will require root privileges via the &lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;command&lt;/span&gt;, so you may be required
to enter your password &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; sudo. ddev is about to issue the command: 
    &lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ddev &lt;span style="color: #c20cb9; font-weight: bold;"&gt;hostname&lt;/span&gt; meedjum.ddev.local 127.0.0.1 
Please enter your password &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; prompted. 
Running Command  &lt;span style="color: #007800;"&gt;Command&lt;/span&gt;=&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ddev &lt;span style="color: #c20cb9; font-weight: bold;"&gt;hostname&lt;/span&gt; meedjum.ddev.local 127.0.0.1
&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; password &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; nigel: 
Pulling db &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;drud&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;mariadb-local:v0.8.0&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;... 
Creating ddev-meedjum-db ... &lt;span style="color: #000000; font-weight: bold;"&gt;done&lt;/span&gt;
Pulling dba &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;drud&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;phpmyadmin:v0.2.0&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;... 
Creating ddev-meedjum-web ... &lt;span style="color: #000000; font-weight: bold;"&gt;done&lt;/span&gt;
Creating ddev-meedjum-dba ...  
Creating ddev-meedjum-web ...  
 
Network ddev_default is external, skipping 
Pulling ddev-router &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;drud&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ddev-router:v0.5.0&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;... 
Creating ddev-router ... &lt;span style="color: #000000; font-weight: bold;"&gt;done&lt;/span&gt;
 
Successfully started meedjum 
Your project can be reached at http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;meedjum.ddev.local and https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;meedjum.ddev.local &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Installing Composer&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;Drupal 8 requires composer and that needs installing on our clean system. There are plenty of tutorials online on how to achieve this, so I'll whizz through this quickly. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-get update&lt;/span&gt;
Hit:&lt;span style="color: #000000;"&gt;1&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;security.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-security InRelease
Hit:&lt;span style="color: #000000;"&gt;2&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial InRelease
Hit:&lt;span style="color: #000000;"&gt;3&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-updates InRelease
Hit:&lt;span style="color: #000000;"&gt;4&lt;/span&gt; http:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;gb.archive.ubuntu.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial-backports InRelease
Hit:&lt;span style="color: #000000;"&gt;5&lt;/span&gt; https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;download.docker.com&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;linux&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ubuntu xenial InRelease
Reading package lists... Done&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Install the dependencies
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;apt-get install&lt;/span&gt; curl php-cli php-mbstring &lt;span style="color: #c20cb9; font-weight: bold;"&gt;git&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;unzip&lt;/span&gt;
Reading package lists... Done&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Download composer
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;curl &lt;span style="color: #660033;"&gt;-sS&lt;/span&gt; https:&lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt;getcomposer.org&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;installer &lt;span style="color: #660033;"&gt;-o&lt;/span&gt; composer-setup.php&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Install it globally
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; php composer-setup.php &lt;span style="color: #660033;"&gt;--install-dir&lt;/span&gt;=&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin &lt;span style="color: #660033;"&gt;--filename&lt;/span&gt;=composer
All settings correct &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; using Composer
Downloading...
 
Composer &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;version 1.6.3&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt; successfully installed to: &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;composer
Use it: php &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;usr&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;local&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;bin&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;composer&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Now check it's been installed correctly
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;composer
   ______
  &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; ____&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;___  ____ ___  ____  ____  ________  _____
 &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;   &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; __ \&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; __ &lt;span style="color: #000000; font-weight: bold;"&gt;`&lt;/span&gt;__ \&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; __ \&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; __ \&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; ___&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; _ \&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; ___&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;___&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;_&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;_&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;_&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;__  &lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;  __&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;
\____&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;\____&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;_&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;_&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;_&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt; .___&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;\____&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;____&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;\___&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;_&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;
                    &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;_&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;
Composer version 1.6.3 &lt;span style="color: #000000;"&gt;2018&lt;/span&gt;-01-&lt;span style="color: #000000;"&gt;31&lt;/span&gt; &lt;span style="color: #000000;"&gt;16&lt;/span&gt;:&lt;span style="color: #000000;"&gt;28&lt;/span&gt;:&lt;span style="color: #000000;"&gt;17&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Building Out the Drupal 8 Project&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The &lt;i&gt;ddev start&lt;/i&gt; command creates a new subdirectory called &lt;strong&gt;.ddev&lt;/strong&gt; in the project's root directory. Within the directory we have &lt;strong&gt;config.yaml&lt;/strong&gt; and  &lt;strong&gt;docker-compose.yaml&lt;/strong&gt;. The config file contains the configuration of our ddev project such as the version of PHP, webpage url, type of project (drupal8) amongst other items. The docker yaml file contains the container configuration. &lt;/p&gt;
&lt;p&gt;Interaction with the ddev project can be accomplished in two ways, either with &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ddev exec &lt;em&gt;command&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;or by spawning a shell with&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ddev ssh&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;and using &lt;strong&gt;exit&lt;/strong&gt; to terminate the interactive session. &lt;/p&gt;
&lt;p&gt;Our first requirement is to get dependencies into our D8 project since it is vendor-ised and uses &lt;strong&gt;composer&lt;/strong&gt; as its dependency management.&lt;/p&gt;
&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;Ok my Drupal core was on 8.4.4 and 8.4.5 and then 8.5 had been released so it needed updating, and in my case would update to 8.4.5 initially 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot$ composer update &lt;span style="color: #660033;"&gt;--with-dependencies&lt;/span&gt;
Gathering patches &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; root package.
Loading composer repositories with package information
Updating dependencies &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;including require-dev&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;
Package operations: &lt;span style="color: #000000;"&gt;51&lt;/span&gt; installs, &lt;span style="color: #000000;"&gt;0&lt;/span&gt; updates, &lt;span style="color: #000000;"&gt;0&lt;/span&gt; removals
Gathering patches &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; root package.
Gathering patches &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; dependencies. This might take a minute.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Now since there were schema changes, those need to be applied. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot$ ddev &lt;span style="color: #7a0874; font-weight: bold;"&gt;exec&lt;/span&gt; drush &lt;span style="color: #c20cb9; font-weight: bold;"&gt;updatedb&lt;/span&gt;
Performing node_update_8401                                          &lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;ok&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; 
Cache rebuild complete.                                              &lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;ok&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; 
Finished performing updates.                                         &lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;ok&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; 
The following updates are pending:
 
node module : 
  &lt;span style="color: #000000;"&gt;8401&lt;/span&gt; -   Run a node access rebuild, &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; required. 
 
Do you wish to run all pending updates? &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;y&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;n&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;: y&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Settings.php&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;This is where things started to go awry. I already have a fully constructed &lt;strong&gt;settings.php&lt;/strong&gt; and &lt;strong&gt;settings.local.php&lt;/strong&gt;. The settings.php file contains my Memcached settings. However the memcache(d) PHP libraries aren't shipped in the ddev product. Obviously by that fact ddev doesn't support Memcached. &lt;/p&gt;
&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;When I attempted a drush status command I was inundated with errors. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;sites&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;default$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;vi&lt;/span&gt; settings.local.php
nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;sites&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;default$ ddev &lt;span style="color: #7a0874; font-weight: bold;"&gt;exec&lt;/span&gt; drush status
Drupal\memcache\MemcacheException: No Memcache extension found &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;var&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;www&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;html&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;modules&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;contrib&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;memcache&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;src&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;DrupalMemcacheFactory.php on line &lt;span style="color: #000000;"&gt;162&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;#0 /var/www/html/docroot/modules/contrib/memcache/src/DrupalMemcacheFactory.php(62): Drupal\memcache\DrupalMemcacheFactory-&gt;initialize() &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
As a consequence I commented out the Memcache settings
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Memcache&lt;br /&gt;//Memcache configuration&lt;br /&gt;//$settings['memcache']['servers'] = ['127.0.0.1:11211' =&gt; 'default'];&lt;br /&gt;//$settings['memcache']['bins'] = ['default' =&gt; 'default'];&lt;br /&gt;//$settings['memcache']['key_prefix'] = 'badzillad8';&lt;br /&gt;//$settings['cache']['default'] = 'cache.backend.memcache';&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Importing the Database&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;The next problem is ddev looks for the db credentials in settings.php whereas I have my credentials in my settings.local.php file. I changed the credentials in the settings.local.php file and I copied my database file to the /tmp directory. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;sites&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;default$ ddev import-db  &lt;span style="color: #660033;"&gt;--extract-path&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tmp
Provide the path to the database you wish to import. 
Import path: &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tmp&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;db-&lt;span style="color: #000000;"&gt;2018&lt;/span&gt;-03-&lt;span style="color: #000000;"&gt;10&lt;/span&gt;.sql.gz
Failed to import database &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; meedjum: failed to &lt;span style="color: #c20cb9; font-weight: bold;"&gt;write&lt;/span&gt; settings &lt;span style="color: #c20cb9; font-weight: bold;"&gt;file&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; meedjum: Failed to get Drupal settings &lt;span style="color: #c20cb9; font-weight: bold;"&gt;file&lt;/span&gt; path: settings files already exist and are being managed by the user &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
More errors! The import failed. I thought it could be because it required the credentials in settings.php but that didn't work either. So I decided to use Drush instead:
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #666666;"&gt;nigel@ddev:~/projects/meedjum/docroot/sites/default$ &lt;/span&gt;ddev &lt;span style="color: #7a0874; font-weight: bold;"&gt;exec&lt;/span&gt; drush sql-cli &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tmp&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;db-&lt;span style="color: #000000;"&gt;2018&lt;/span&gt;-03-&lt;span style="color: #000000;"&gt;10&lt;/span&gt;.sql&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;HTTP Port Forwarding&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-10%20at%2015.46.21.png?itok=hMzNpeQj 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-10%20at%2015.46.21.png?itok=19ElDITG 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-10%20at%2015.46.21.png?itok=stTO3iQK 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-10%20at%2015.46.21.png?itok=Kmlp-Ivk 1526w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-10%20at%2015.46.21.png?itok=hMzNpeQj" alt="HTTP Port Forward" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.03.59.png?itok=paAus2c1 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.03.59.png?itok=1lyjZtih 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.03.59.png?itok=o7fpGydO 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.03.59.png?itok=u7dhNeop 1326w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.03.59.png?itok=paAus2c1" alt="Localhost domain" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.16.13.png?itok=vZm4Hvoe 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.16.13.png?itok=f3fWRXdM 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.16.13.png?itok=1PaW4psd 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.16.13.png?itok=eHu0PxkP 1688w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-10%20at%2017.16.13.png?itok=vZm4Hvoe" alt="Error 40x" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;Just like our earlier forwarding of the ssh port so we can log into the VM, we also have to forward http port 80 traffic. To do this, we go back to the virtual machine network configuration, and set up a redirect from port 9090 (somewhat arbitrary) on the host to port 80 on the guest. See the first screenshot. This will take us to the the default website on the VM. We need to explicitly tell a browser which site it is - to do that we add an entry on the machine where we will be using our browser - which in my case will be my MacBook.
&lt;br /&gt;&lt;br /&gt;
So I have added the entry to /etc/hosts of the working ddev domain name and the localhost IP address
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;127.0.0.1       localhost
255.255.255.255 broadcasthost
::&lt;span style="color: #000000;"&gt;1&lt;/span&gt;             localhost
 
127.0.0.1 meedjum.ddev.local&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Now we need to reboot our VM and then login back in and issue a ddev start on our project. We can also check whether everything is good with a docker ps command. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;root&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;home&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;nigel&lt;span style="color: #666666; font-style: italic;"&gt;# init 6&lt;/span&gt;
Connection to 127.0.0.1 closed by remote host.
Connection to 127.0.0.1 closed.
Nigels-MacBook-Pro:tmp nigel$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;ssh&lt;/span&gt; &lt;span style="color: #660033;"&gt;-p&lt;/span&gt; &lt;span style="color: #000000;"&gt;2222&lt;/span&gt; nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;127.0.0.1
&lt;span style="color: #666666;"&gt;nigel@ddev:~$ &lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;cd&lt;/span&gt; projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;
nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum$ ddev start
Starting environment &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; meedjum... 
nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum$ docker &lt;span style="color: #c20cb9; font-weight: bold;"&gt;ps&lt;/span&gt;
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                             PORTS                                                                                      NAMES
5fd9a60cb90c        drud&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;ddev-router:v0.5.0           &lt;span style="color: #ff0000;"&gt;"/app/docker-entrypo…"&lt;/span&gt;   &lt;span style="color: #000000;"&gt;10&lt;/span&gt; seconds ago      Up &lt;span style="color: #000000;"&gt;10&lt;/span&gt; seconds &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;healthy&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;            0.0.0.0:&lt;span style="color: #000000;"&gt;80&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;80&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp, 0.0.0.0:&lt;span style="color: #000000;"&gt;443&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;443&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp, 0.0.0.0:&lt;span style="color: #000000;"&gt;8025&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;8025&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp, 0.0.0.0:&lt;span style="color: #000000;"&gt;8036&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;8036&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp   ddev-router
cea77b7cbc6b        drud&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;nginx-php-fpm-local:v1.1.0   &lt;span style="color: #ff0000;"&gt;"/start.sh"&lt;/span&gt;              &lt;span style="color: #000000;"&gt;7&lt;/span&gt; hours ago         Up &lt;span style="color: #000000;"&gt;11&lt;/span&gt; seconds &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;healthy&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;            &lt;span style="color: #000000;"&gt;443&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp, 0.0.0.0:&lt;span style="color: #000000;"&gt;32771&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;80&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp, 0.0.0.0:&lt;span style="color: #000000;"&gt;32770&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;8025&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp                                    ddev-meedjum-web
2dc08e116820        drud&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;phpmyadmin:v0.2.0            &lt;span style="color: #ff0000;"&gt;"/run.sh phpmyadmin"&lt;/span&gt;     &lt;span style="color: #000000;"&gt;7&lt;/span&gt; hours ago         Up &lt;span style="color: #000000;"&gt;11&lt;/span&gt; seconds &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;health: starting&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;   0.0.0.0:&lt;span style="color: #000000;"&gt;32769&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;80&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp                                                                      ddev-meedjum-dba
f239a52ae806        drud&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;mariadb-local:v0.8.0         &lt;span style="color: #ff0000;"&gt;"/docker-entrypoint.…"&lt;/span&gt;   &lt;span style="color: #000000;"&gt;7&lt;/span&gt; hours ago         Up &lt;span style="color: #000000;"&gt;12&lt;/span&gt; seconds &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;healthy&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;            0.0.0.0:&lt;span style="color: #000000;"&gt;32768&lt;/span&gt;-&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;3306&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tcp                                                                    ddev-meedjum-db&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
We can now point a web browser at the url we typed into our /etc/hosts file - see third image above. Ok - so we are close but not quite there yet! Looks like this could be the old trusted host pattern issue since it doesn't know about my domain meedjum.ddev.test.&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Add ddev Domain to Trusted Hosts in Settings.php&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;...or rather in my case my settings.local.php file. I added the ddev domain name to the trusted hosts pattern array
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;$settings&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'trusted_host_patterns'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = [&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'meedjum.test'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'meedjum.ddev.local'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Copying the Assets&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-11%20at%2009.26.38.png?itok=pQrRE3Ve 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-11%20at%2009.26.38.png?itok=3T_aByhp 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-11%20at%2009.26.38.png?itok=bU1BJaRD 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-11%20at%2009.26.38.png?itok=mYJLCWoc 2444w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-11%20at%2009.26.38.png?itok=pQrRE3Ve" alt="No images" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;Adding the trusted host entry now means the web site loads successfully but of course the assets are missing and need copying down from my prod site. ddev provides a command for this:
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot$ ddev import-files &lt;span style="color: #660033;"&gt;--src&lt;/span&gt;=&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;tmp&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files.tar.gz
Successfully imported files &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; meedjum &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
100% my fault, but my file structure ended up as sites/default/files/files because I'd tarballed my prod files directory within the tarball, instead of just its contents. So I moved everything back one directory. 
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mv&lt;/span&gt; sites&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;default&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files&lt;span style="color: #000000; font-weight: bold;"&gt;/*&lt;/span&gt; sites&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;default&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;.
nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mv&lt;/span&gt; sites&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;default&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;.htaccess sites&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;default&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;.
nigel&lt;span style="color: #000000; font-weight: bold;"&gt;@&lt;/span&gt;ddev:~&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;projects&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;meedjum&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;docroot$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;rmdir&lt;/span&gt; sites&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;default&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;files&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Completed Project&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.08.06.png?itok=KRAPhIbF 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.08.06.png?itok=7L9fTv8R 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.08.06.png?itok=6iGL9DEv 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.08.06.png?itok=11PErvGZ 2482w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.08.06.png?itok=KRAPhIbF" alt="Complete Blog" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.09.27.png?itok=3UGeLQMw 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.09.27.png?itok=3TCbywLN 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.09.27.png?itok=6899WDN7 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.09.27.png?itok=n1x2oYdn 1804w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2018-03/Screen%20Shot%202018-03-11%20at%2010.09.27.png?itok=3UGeLQMw" alt="Successful Blog" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Ok so in the interim I fixed the missing Font Awesome library - not something I'd noticed before, but obviously it's been gitignored and it isn't in the composer.json file. Anyhoo the site is now fully functional and you can see from the URL bar I need to append the port :9090 as per my previous port forwarding fix. &lt;/p&gt;
&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Verdict&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Playing with ddev was an interesting experience, not without challenges, but ultimately rewarding. Here are some of the points I made as I went along. &lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;The &lt;em&gt;ddev exec &lt;/em&gt;command is run as root. This is a problem because it basically means using composer with it - such as &lt;em&gt;ddev exec composer update &lt;/em&gt;- would trash the file permissions of my codebase. Ownerships would become root, and that would lead to problems down the line. Composer should never be run as root. So the net effect is composer needs to be installed on the host system. Ideally I wanted a totally un-poluted filesystem without installing anything on the host beyond ddev. It also means since composer has a dependency on PHP, that needs to be installed, and now we have a system with different PHP CLI and FPM versions. &lt;/li&gt;
	&lt;li&gt;I couldn't get the &lt;em&gt;ddev import-db &lt;/em&gt;command to work. A minor inconvenience and of course it is easy to  use alternatives with the command line or drush. &lt;/li&gt;
	&lt;li&gt;Now I've got a working system - what next? I have a welter of phing targets to deploy my code, usually invoked by Jenkins. I could add phing at project level but how would I get Jenkins docker-ised up and running across all projects? I sense that could be tricky. &lt;/li&gt;
	&lt;li&gt;I can see ddev's value. I would place it in a small agency with both legacy D6 and D7 support projects alongside new D8 and WP builds. I can't see it as an enterprise solution - there is too much missing such as Memcache and the previously mentioned phing and Jenkins. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But all in all I really enjoyed my Saturday watching the football whilst playing with ddev and writing this blog - despite my teams losing! &lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;div class="field field--name-field-blog-youtube field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-text-youtube paragraph--view-mode--default"&gt;
          
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal8" hreflang="en"&gt;Drupal 8&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal7" hreflang="en"&gt;Drupal 7&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/devops" hreflang="en"&gt;devops&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/docker" hreflang="en"&gt;Docker&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/virtualbox" hreflang="en"&gt;VirtualBox&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Sat, 10 Mar 2018 21:12:50 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">140 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title>How to use Drupal 6 bookcat module with FNProgramvare BookCAT 10</title>
  <link>http://badzilla.co.uk/How-to-use-Drupal-6-bookcat-module-with-FNProgramvare-BookCAT-10</link>
  <description>
&lt;span&gt;How to use Drupal 6 bookcat module with FNProgramvare BookCAT 10&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Sun, 03/02/2013 - 09:50&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;When I originally developed my Drupal 6 bookcat module as a CMS website version of FNProgramvare's BookCAT product, it was aimed at BookCAT version 8. Since then Fredrik's BookCAT has gone through two further revisions, and during that process the database schema has changed. This has led to problems with my Drupal 6 module and as a consequence I've introduced a solution which circumvents the necessity to redevelop my work or have multiple versions of my own.&lt;/p&gt;

&lt;p&gt;To get FNProgramvare's BookCAT database into the Drupal CMS, you need to use the Bullzip MS Access-&gt; MySQL conversion facility. This will give you an MySQL sql dump file comprising many thousands of MMySQL commands. To ensure the continued use of my Drupal module, before importing the dump file into MySQL, simply add the following lines to the end of the code.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;div class="field field--name-field-blog-youtube field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;div class="geshifilter"&gt;&lt;div class="mysql geshifilter-mysql" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=UPDATE"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;UPDATE&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`BookImage`&lt;/span&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=SET"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;SET&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`Image`&lt;/span&gt; &lt;span style="color: #CC0099;"&gt;=&lt;/span&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=NULL"&gt;&lt;span style="color: #9900FF; font-weight: bold;"&gt;NULL&lt;/span&gt;&lt;/a&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=WHERE"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;WHERE&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`Image`&lt;/span&gt; &lt;span style="color: #CC0099;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;'TPF0'&lt;/span&gt; &lt;a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"&gt;&lt;span style="color: #CC0099; font-weight: bold;"&gt;AND&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`ImageExternal`&lt;/span&gt; &lt;span style="color: #CC0099;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;1&lt;/span&gt;&lt;span style="color: #000033;"&gt;;&lt;/span&gt;
&lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=UPDATE"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;UPDATE&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`PersonImage`&lt;/span&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=SET"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;SET&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`Image`&lt;/span&gt; &lt;span style="color: #CC0099;"&gt;=&lt;/span&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=NULL"&gt;&lt;span style="color: #9900FF; font-weight: bold;"&gt;NULL&lt;/span&gt;&lt;/a&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=WHERE"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;WHERE&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`Image`&lt;/span&gt; &lt;span style="color: #CC0099;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;'TPF0'&lt;/span&gt; &lt;a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"&gt;&lt;span style="color: #CC0099; font-weight: bold;"&gt;AND&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`ImageExternal`&lt;/span&gt; &lt;span style="color: #CC0099;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;1&lt;/span&gt;&lt;span style="color: #000033;"&gt;;&lt;/span&gt;
&lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=ALTER"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;ALTER&lt;/span&gt;&lt;/a&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=TABLE"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;TABLE&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`Book`&lt;/span&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=CHANGE"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;CHANGE&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`TitleSort`&lt;/span&gt; &lt;span style="color: #008000;"&gt;`SortBy`&lt;/span&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=VARCHAR"&gt;&lt;span style="color: #999900; font-weight: bold;"&gt;varchar&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #FF00FF;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;255&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;)&lt;/span&gt;&lt;span style="color: #000033;"&gt;;&lt;/span&gt;
&lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=ALTER"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;ALTER&lt;/span&gt;&lt;/a&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=TABLE"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;TABLE&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`Contents`&lt;/span&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=CHANGE"&gt;&lt;span style="color: #990099; font-weight: bold;"&gt;CHANGE&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #008000;"&gt;`TitleSort`&lt;/span&gt; &lt;span style="color: #008000;"&gt;`SortBy`&lt;/span&gt; &lt;a href="https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt=VARCHAR"&gt;&lt;span style="color: #999900; font-weight: bold;"&gt;varchar&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #FF00FF;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;255&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;)&lt;/span&gt;&lt;span style="color: #000033;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
This will amend your database schema so it will now work with my Drupal 6 bookcat module :)&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/mysql" hreflang="en"&gt;MySQL&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Sun, 03 Feb 2013 09:50:55 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">50 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title>Drupal 6: Set Default Value in CCK Select List Widget Using PHP</title>
  <link>http://badzilla.co.uk/Drupal-6-Set-Default-Value-in-CCK-Select-List-Widget-Using-PHP</link>
  <description>
&lt;span&gt;Drupal 6: Set Default Value in CCK Select List Widget Using PHP&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Sun, 15/07/2012 - 17:33&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;When a select list widget is created in a field using CCK in Drupal 6, it is possible to manually set a default value as one of the form fields (see below). However, it may not always be preferable to do this, and on occasion there may be a desire to achieve this dynamically with some PHP code. A good example of such circumstances would be a country select field which defaults to the country the user is viewing the website from - this itself could be discovered using an IP address look-up.&lt;/p&gt;

&lt;p&gt;So how do we do this? There are two different ways of applying the PHP code - firstly, as a PHP snippet in the CCK field itself &lt;em&gt;providing you have PHP snippets enabled in admin/build/modules&lt;/em&gt; - this can be seen below. The second method would be in a custom module using the hook &lt;strong&gt;hook_form_alter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The PHP Snippet method is a little esoteric, with a wonderful help prompt&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;return array(&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0 &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;value &lt;/span&gt;&lt;span style="color: #007700"&gt;for &lt;/span&gt;&lt;span style="color: #0000BB"&gt;value&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// You'll usually want to stop here. Provide more values&lt;br /&gt;  // if you want your 'default value' to be multi-valued:&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000BB"&gt;1 &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;value &lt;/span&gt;&lt;span style="color: #007700"&gt;for &lt;/span&gt;&lt;span style="color: #0000BB"&gt;value&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000BB"&gt;2 &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; ...&lt;br /&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
To figure out the expected format, you can use the devel load tab provided by devel module on a profile_contact content page. This doesn't include the most vital piece of information - the associative array must return the &lt;strong&gt;key&lt;/strong&gt; of the selection. So for instance, a select list option of 
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;GB&lt;/span&gt;&lt;span style="color: #007700"&gt;|&lt;/span&gt;&lt;span style="color: #0000BB"&gt;United Kingdom&lt;br /&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
the key will be &lt;strong&gt;GB&lt;/strong&gt;
For the country code example at &lt;a href="http://badzilla.co.uk/Drupal-6-Country-Field-Select-List-on-Registration-Setting-Default-by-IP-Address-Detection"&gt;Drupal 6: Country Field Select List on Registration setting Default by IP Address Detection&lt;/a&gt; this would be
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;return array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0 &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'GB'&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
Now, if this was to be included in a PHP module it would need to reside in a hook_form_alter function. 
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;your_module_form_alter&lt;/span&gt;&lt;span style="color: #007700"&gt;(&amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'profile_contact_node_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;) &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'fieldgroup_name'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'field_fieldname'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'value'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'GB'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
You will need to change a few values in here obviously - the function name to reflect your own module's name, and the fieldgroup_name (if the field is in a group) and field_fieldname indices.&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Sun, 15 Jul 2012 16:33:44 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">22 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title>Drupal 6: Country Field Select List on Registration Setting Default by IP Address Detection</title>
  <link>http://badzilla.co.uk/Drupal-6-Country-Field-Select-List-on-Registration-Setting-Default-by-IP-Address-Detection</link>
  <description>
&lt;span&gt;Drupal 6: Country Field Select List on Registration Setting Default by IP Address Detection&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Sun, 15/07/2012 - 17:02&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Another powerful feature of Drupal is the ability to customise the user registration process by adding fields. These fields can be anything, but a worthwhile example would be address information with a country field select list the user can select their country from. Even better would be the ability for the system to detect the user's country and default the select list to that. That is what this tutorial sets out to achieve. It can't be accomplished purely by 'site building' with existing contributed modules - there is a small amount of custom PHP code required. This can be included in the configuration if you have &lt;em&gt;PHP Snippets&lt;/em&gt; enabled on your site - or as I do here, stick all the code in a custom self-contained PHP module.&lt;/p&gt;

&lt;p&gt;There are a number of contributed modules you will need to install:&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;Automatic Nodetitles
Token
CCK -&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt; Content, Fieldgroup, Option Widgets, Text
Content Profile -&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt; Content Profile Tokens, Content Profile User Registration
Country Codes API
IP &lt;span style="color: #000000;"&gt;2&lt;/span&gt; Country&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
These themselves may have dependencies I've forgotten to list - if your system prompts for any others, download, install and enable.&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Create the Profile Contact Type&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Content%20types%20_%20drupal6%20clean%20install_1342339769062.png?itok=BLoraFyf 156w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Content%20types%20_%20drupal6%20clean%20install_1342339769062.png?itok=4lLPm1RT 312w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Content%20types%20_%20drupal6%20clean%20install_1342339769062.png?itok=7MtXNl1d 623w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2017-09/Content%20types%20_%20drupal6%20clean%20install_1342339769062.png?itok=9evxDI8d 1246w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Content%20types%20_%20drupal6%20clean%20install_1342339769062.png?itok=BLoraFyf" alt="Installed" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Firstly you need to create a Profile Contact content type. To help you, I've shown a screenshot to the left of the fields and checkbox selections you will need. The first point of note is the &lt;em&gt;Automatic Title Generation&lt;/em&gt;. Since we don't want to encumber our poor user with a meaningless prompt for a title for their address, we need this mechanism to automatically generate the title without a prompt. We are using here a token replacement pattern for what the system will use.&lt;/p&gt;

&lt;p&gt;Also note that there is no &lt;em&gt;Body Field Label&lt;/em&gt; - since we don't want a body field either. So make sure you remove the defaulted body field label. Comments are disabled since they are meaningless, and finally you must tick the checkbox to use this content type as a content profile type.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Create the Fields&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Manage%20Fields.png?itok=q8HZGwQT 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Manage%20Fields.png?itok=piBbNe1D 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Manage%20Fields.png?itok=7rYyjIY5 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2017-09/Manage%20Fields.png?itok=AnK9jUrc 1584w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Manage%20Fields.png?itok=q8HZGwQT" alt="Manage Fields" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;You will need to create the fields you wish to reside in the profile contact content type. This could include telephone numbers, home websites etc, and obviously a country field since this is the purpose of this exercise. The three fields I have created are Address1, Address2, and Country. Address1 and Address2 are simple textfields. The Country field is discussed further in the next screenshot.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Country Select List Field&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Country%20_%20drupal6%20clean%20install_1342340754199.png?itok=abYR_-_7 250w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Country%20_%20drupal6%20clean%20install_1342340754199.png?itok=Kp13Isov 501w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Country%20_%20drupal6%20clean%20install_1342340754199.png?itok=LdkyBgaG 1002w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2017-09/Country%20_%20drupal6%20clean%20install_1342340754199.png?itok=jIUGSVXI 1584w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Country%20_%20drupal6%20clean%20install_1342340754199.png?itok=abYR_-_7" alt="Country Select List" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The country list field is created using the &lt;em&gt;select list&lt;/em&gt; option. You will need to stick a value or two in the allowed values list. It doesn't really matter what you put in here since the custom code will overwrite later, so I've just put a couple of values in.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Profile Contact - Content Profile&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Profile%20Contact%20_%20drupal6%20clean%20install_1342341047767.png?itok=k5CRpeOA 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Profile%20Contact%20_%20drupal6%20clean%20install_1342341047767.png?itok=G5a7grUA 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Profile%20Contact%20_%20drupal6%20clean%20install_1342341047767.png?itok=zmZgwwTp 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2017-09/Profile%20Contact%20_%20drupal6%20clean%20install_1342341047767.png?itok=UL_ZuOgf 1584w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Profile%20Contact%20_%20drupal6%20clean%20install_1342341047767.png?itok=k5CRpeOA" alt="Profile Contact" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Once all the required fields are defined, you need to let the system know where to place the the fields - such as on a separate tab on the user profile, and of course the most important bit from our perspective - click the &lt;em&gt;Use on Registration&lt;/em&gt; checkbox.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;User Registration&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/User%20account.png?itok=BhKIu1a8 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/User%20account.png?itok=nbH0VeFR 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/User%20account.png?itok=PaY0dVNz 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2017-09/User%20account.png?itok=_8C_BQ-1 1584w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/User%20account.png?itok=BhKIu1a8" alt="User Registration" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;If you now log off your account and attempt to register as a new user, you should see something like the image to the left if you've followed my instructions correctly.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Custom Code&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;So we now have our starting point for our custom development! We need code that does two things:
1. Populate the select list with all the countries;
2. Set a default value dependent upon the IP address of the user.
&lt;strong&gt;select_country.info&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;; Id: $
name = &lt;span style="color: #ff0000;"&gt;"select_country"&lt;/span&gt;
description = &lt;span style="color: #ff0000;"&gt;"Select Country: Add country list to profile country field and set default value on IP address"&lt;/span&gt;
core = &lt;span style="color: #000000;"&gt;6&lt;/span&gt;.x
php = &lt;span style="color: #000000;"&gt;5.2&lt;/span&gt;
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = token
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = content
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = countries_api
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = ip2country
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = content_profile
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = auto_nodetitle&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;strong&gt;select_country.install&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Copyright @badzillacouk http://www.badzilla.co.uk&lt;br /&gt;// Licence GPL. This program may be distributed as per the terms of GPL and all credits&lt;br /&gt;// must be retained&lt;br /&gt;//&lt;br /&gt;// If you find this script useful, please consider a donation to help me fund my web presence&lt;br /&gt;// and encourage me to develop more products to be placed under the terms of GPL&lt;br /&gt;// To donate, go to http://www.badzilla.co.uk and click on the donation button&lt;br /&gt;//&lt;br /&gt;// This program is distributed in the hope that it will be useful,&lt;br /&gt;// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;select_country_install&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"UPDATE {system} SET weight = 100 WHERE `name` = 'select_country'"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
Note here that I've had to give a weight to this module to ensure it is one of the last to be called, i.e. after CCK and associated modules have done their work.
&lt;br /&gt;
&lt;strong&gt;select_country.module&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Copyright @badzillacouk http://www.badzilla.co.uk&lt;br /&gt;// Licence GPL. This program may be distributed as per the terms of GPL and all credits&lt;br /&gt;// must be retained&lt;br /&gt;//&lt;br /&gt;// If you find this script useful, please consider a donation to help me fund my web presence&lt;br /&gt;// and encourage me to develop more products to be placed under the terms of GPL&lt;br /&gt;// To donate, go to http://www.badzilla.co.uk and click on the donation button&lt;br /&gt;//&lt;br /&gt;// This program is distributed in the hope that it will be useful,&lt;br /&gt;// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;select_country_form_alter&lt;/span&gt;&lt;span style="color: #007700"&gt;(&amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'profile_contact_node_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'group_address'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'field_country'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'value'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ip2country_get_country&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'REMOTE_ADDR'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'group_address'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'field_country'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#pre_render'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'select_country_options'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;select_country_options&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$element&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$element&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'value'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#options'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'- None -'&lt;/span&gt;&lt;span style="color: #007700"&gt;)) + &lt;/span&gt;&lt;span style="color: #0000BB"&gt;countries_api_get_array&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'iso2'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'printable_name'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$element&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Completed Country Registration&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/CompletedUserAccount.png?itok=7c1Xywfx 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/CompletedUserAccount.png?itok=h98srGN2 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/CompletedUserAccount.png?itok=Ikt_I9XW 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2017-09/CompletedUserAccount.png?itok=IH3gtbeJ 1584w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/CompletedUserAccount.png?itok=7c1Xywfx" alt="Completed Country Registration" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;So now when an attempt is made at registration, the select list has been extended (in width) to allow for the maximum country's length, and it has defaulted to my home country, United Kingdom&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Sun, 15 Jul 2012 16:02:18 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">21 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title> Drupal 6: Webform + Paypal Donations Integration</title>
  <link>http://badzilla.co.uk/Drupal-6-Webform-Paypal-Donations-Integration-Module</link>
  <description>
&lt;span&gt; Drupal 6: Webform + Paypal Donations Integration&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Thu, 05/07/2012 - 19:22&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;This module provides integration between the &lt;a href="http://drupal.org/project/webform"&gt;Drupal Webform&lt;/a&gt; module and Paypal donation buttons. This includes the facility to receive payment status responses from Paypal and record these in the webforms as a hidden field for audit / inspection later to ascertain whether payments were successful or refused. The module should be useful for charities and NGOs as a mechanism to collect donations from their followers.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The module was developed as a commission from a well-known NGO. The NGO was already utilising a SECPAY gateway on their 'Donate Now' webform, and required a radio button in the donation process for the user to select either the SECPAY credit card / debit card direct payment, or a Paypal payment. As a consequence, this module presupposes a SECPAY gateway is being used. It should be relatively trivial for even a low experience PHP / Drupal developer to remove this constraint if necessary from my code so the only option is Paypal, or I can be contacted directly and undertake the work at a small cost.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Usage&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;To ensure the module works correctly, the steps identified below should be followed closely, paying particular attention when requested to do so.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Paypal Donation Button Creation&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;You will need a donation button from the Paypal site. It is also recommended you create a Paypal sandbox account for test purposes before you 'go live'. By doing this you can satisfy yourself everything is working fine before you commence your campaign.&lt;/p&gt;
&lt;p&gt;The navigation around the Paypal site is inordinately complex. To create a button in the UK (may vary depending upon your territory), do:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log into your Paypal account;&lt;/li&gt;
&lt;li&gt;Click on "Merchant Services";&lt;/li&gt;
&lt;li&gt;Click on "Website Payments Standard";&lt;/li&gt;
&lt;li&gt;Click on "Create Button Now";&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This will take you to the button factory. Once you have changed the button type to 'Donations' your Step 1 screen should be filled in like below. Enter reasonable text for the &lt;i&gt;Organisation name/service&lt;/i&gt; and for the &lt;i&gt;Donation ID&lt;/i&gt; values. This will be very useful in the future when you have a whole bunch of buttons and you are having trouble distinguishing between them all.&lt;/p&gt;
&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal1-edited.jpeg?itok=KsYfRllS 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Paypal1-edited.jpeg?itok=W0qpLHNG 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Paypal1-edited.jpeg?itok=OI_wF06B 750w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal1-edited.jpeg?itok=KsYfRllS" alt="Paypal" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Paypal Donation Button Step 1&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Step 3 of the process will look like the screen below. This is where you need to add you own site address to the two URL fields I have partially pixelated out. The first URL is the address the user will be returned to once payment from Paypal has been collected. The second URL is the 'secret' URL that Paypal will use to send the payment status information to your site.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal2-edited.jpeg?itok=CXdVaOPw 296w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Paypal2-edited.jpeg?itok=sHFEQNzG 592w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Paypal2-edited.jpeg?itok=r4AdeuKC 752w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal2-edited.jpeg?itok=CXdVaOPw" alt="Paypal2" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Paypal Donation Button Step 3&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;At the end of the process you will get a link to the button in the format:&lt;br /&gt;
&lt;strong&gt;https: //www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=xxxxxxxxxxxxxx&lt;/strong&gt;&lt;br /&gt;
if you are using Paypal, and a URL prefixing the word 'sandbox' before 'paypal' in the address if you are using the test Sandbox system. You should copy these into your clipboard for later.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Installation of the paypal_webform Module&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;I'm assuming you know how to install a Drupal module :)&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;paypal_webform.info&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;; &lt;span style="color: #007800;"&gt;$Id&lt;/span&gt;: $
name = Paypal Webform
description = Adds the Paypal donation colleciton method to the donations page
core = &lt;span style="color: #000000;"&gt;6&lt;/span&gt;.x
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = webform
php = &lt;span style="color: #000000;"&gt;5.2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;paypal_webform.module&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;paypal_webform.module&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Copyright  www.badzilla.co.uk&lt;br /&gt;// Author: www.badzilla.co.uk @badzillacouk&lt;br /&gt;// All Drupal work undertaken - competitive hourly and daily rates&lt;br /&gt;// 13/11/2011&lt;br /&gt;// paypal_webform - Adds Paypal functionality to the single donation webform &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;define&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'PAYPAL_PRODUCTION'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;define&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'PAYPAL_SANDBOX'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;global &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$paypal_webform&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$paypal_webform &lt;/span&gt;&lt;span style="color: #007700"&gt;= array(array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'url' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=xxxxxxxxxxxxx'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;                                                    &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'listener' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ssl://www.paypal.com'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;                        array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'url' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=xxxxxxxxxxxxx'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;                                                    &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'listener' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'ssl://www.sandbox.paypal.com'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;                        );&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Change this value dependent upon whether production, sandbox, or running in test mode on badzilla&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;define&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'PAYPAL_SYSTEM'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;PAYPAL_PRODUCTION&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_form_alter().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;paypal_webform_form_alter&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// locate the webform id and override&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;strpos&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_client_form_'&lt;/span&gt;&lt;span style="color: #007700"&gt;) === &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;) &lt;br /&gt;        if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'component_tree'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'children'&lt;/span&gt;&lt;span style="color: #007700"&gt;])&lt;br /&gt;            return;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$is_pay &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    foreach(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'component_tree'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'children'&lt;/span&gt;&lt;span style="color: #007700"&gt;] as &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$child&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$child&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type'&lt;/span&gt;&lt;span style="color: #007700"&gt;] == &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'pay'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$is_pay &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;            break;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$is_pay&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        return;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// check whether there is a Paypal widget on this form&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;preg_match&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"#webform_client_form_(\d+)$#"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$match&lt;/span&gt;&lt;span style="color: #007700"&gt;))&lt;br /&gt;        return;&lt;br /&gt;&lt;br /&gt;    if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_result&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT COUNT(*) FROM {webform_component} WHERE nid = %d AND form_key = 'payment_method'"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$match&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;])))&lt;br /&gt;        return;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// add theme&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submitted'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payment_method'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#theme'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform_radio'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Knock out the title and use our own &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submitted'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payment_method'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// after build so we can see which radio button was selected&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#after_build'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform_form_after_build'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// add paypal submission &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;array_push&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform_submit_redirect'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;//dsm($form, __FUNCTION__);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;paypal_webform_form_after_build&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;//dsm($_SESSION);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;if (isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#post'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submitted'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payment_method'&lt;/span&gt;&lt;span style="color: #007700"&gt;]) and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#post'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submitted'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payment_method'&lt;/span&gt;&lt;span style="color: #007700"&gt;] == &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// remove the secpay submit &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if ((&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ind &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;array_search&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_simple_payments_submit_redirect'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;])) !== &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;            unset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ind&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;        }&lt;br /&gt;    } elseif (isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#post'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submitted'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payment_method'&lt;/span&gt;&lt;span style="color: #007700"&gt;]) and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#post'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submitted'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payment_method'&lt;/span&gt;&lt;span style="color: #007700"&gt;] == &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'cc_dd'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        if ((&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ind &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;array_search&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform_submit_redirect'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;])) !== &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;            unset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ind&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_menu().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;paypal_webform_menu&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform/submissions/paypal'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Pay'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'drupal_get_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform_submit_redirect'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_LOCAL_TASK&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform/submissions/paypal-response'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Response'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform_response'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_LOCAL_TASK&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform/submissions/paypal-listener'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Listener'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform_listener'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_LOCAL_TASK&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;paypal_webform_submit_redirect&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;    global &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$paypal_webform&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;   &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_SESSION&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_paypal_payment'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'details'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid'&lt;/span&gt;&lt;span style="color: #007700"&gt;],&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'details'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sid'&lt;/span&gt;&lt;span style="color: #007700"&gt;],&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_goto&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$paypal_webform&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;PAYPAL_SYSTEM&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'url'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;paypal_webform_listener&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;    global &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$paypal_webform&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$header &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;""&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$emailtext &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;""&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Read the post from PayPal and add 'cmd'&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$req &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'cmd=_notify-validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    if(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;function_exists&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'get_magic_quotes_gpc'&lt;/span&gt;&lt;span style="color: #007700"&gt;))&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$get_magic_quotes_exists &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;true&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    foreach (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_POST &lt;/span&gt;&lt;span style="color: #007700"&gt;as &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$key &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        if(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$get_magic_quotes_exists &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #0000BB"&gt;true &lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;&amp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;get_magic_quotes_gpc&lt;/span&gt;&lt;span style="color: #007700"&gt;() == &lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;urlencode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;stripslashes&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;        } else {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;urlencode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$req &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$key&lt;/span&gt;&lt;span style="color: #DD0000"&gt;=&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Post back to PayPal to validate&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$header &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"POST /cgi-bin/webscr HTTP/1.0\r\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$header &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Content-Type: application/x-www-form-urlencoded\r\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$header &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Content-Length: " &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;strlen&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$req&lt;/span&gt;&lt;span style="color: #007700"&gt;) . &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"\r\n\r\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$fp &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fsockopen &lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$paypal_webform&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;PAYPAL_SYSTEM&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'listener'&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #0000BB"&gt;443&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$errno&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$errstr&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;30&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$fp&lt;/span&gt;&lt;span style="color: #007700"&gt;) { &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// HTTP ERROR&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;} else {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// NO HTTP ERROR&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fputs&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$fp&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$header &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$req&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;//while (!feof($fp)) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fgets&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$fp&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fclose &lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$fp&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// create the output record&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$out &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;sprintf&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Amount %s %s %s"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_POST&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'mc_currency'&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_POST&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'mc_gross'&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_POST&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payment_status'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// now try and find the correct record in the database by using the email address from Paypal&lt;br /&gt;        // It would kill the server to try and do this in one sql statement so it has been chunked for performance reasons&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$found &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT sid FROM {webform_submitted_data}&lt;br /&gt;                         INNER JOIN {webform_component} ON {webform_submitted_data}.nid = {webform_component}.nid&lt;br /&gt;                         INNER JOIN {webform_submissions} USING (sid)&lt;br /&gt;                         WHERE data = '%s' AND form_key = 'email_address' &lt;br /&gt;                         ORDER BY submitted DESC"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_POST&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payer_email'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;&lt;br /&gt;        while(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_fetch_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res&lt;/span&gt;&lt;span style="color: #007700"&gt;)) { &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res2 &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT cid, nid FROM {webform_component} INNER JOIN {webform_submissions} USING (nid) &lt;br /&gt;                              WHERE sid = %d AND form_key = 'payment_response'"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;            while(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret2 &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_fetch_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res2&lt;/span&gt;&lt;span style="color: #007700"&gt;)) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$found &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;                break &lt;/span&gt;&lt;span style="color: #0000BB"&gt;2&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// HAve we found a record to write?&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$found &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE &lt;/span&gt;&lt;span style="color: #007700"&gt;and isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret2&lt;/span&gt;&lt;span style="color: #007700"&gt;)) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"UPDATE {webform_submitted_data} SET `data` = '%s' WHERE nid = %d AND sid = %d and cid = %d"&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;                      &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$out&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret2&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nid&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sid&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret2&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;cid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        } else {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;watchdog&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"paypal_webform"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;br /&gt;                     &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Unreconciled Paypal payment from @email with data @data"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;br /&gt;                     array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@email' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_POST&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'payer_email'&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@data' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$out&lt;/span&gt;&lt;span style="color: #007700"&gt;), &lt;br /&gt;                     &lt;/span&gt;&lt;span style="color: #0000BB"&gt;WATCHDOG_NOTICE&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;paypal_webform_response&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    if (isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_SESSION&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_paypal_payment'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid'&lt;/span&gt;&lt;span style="color: #007700"&gt;]) &lt;br /&gt;        and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_SESSION&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_paypal_payment'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid'&lt;/span&gt;&lt;span style="color: #007700"&gt;] &lt;br /&gt;        and isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_SESSION&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_paypal_payment'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sid'&lt;/span&gt;&lt;span style="color: #007700"&gt;]) &lt;br /&gt;        and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_SESSION&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_paypal_payment'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sid'&lt;/span&gt;&lt;span style="color: #007700"&gt;]) {&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// redirect to the thank you screen&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_goto&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'node/' &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_SESSION&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_paypal_payment'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid'&lt;/span&gt;&lt;span style="color: #007700"&gt;] . &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'/done'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sid=' &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$_SESSION&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'webform_paypal_payment'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sid'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;&lt;br /&gt;    } else {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;watchdog&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Cannot reconcile response from Paypal with database entries'&lt;/span&gt;&lt;span style="color: #007700"&gt;), &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;WATCHDOG_ERROR&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        die; &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_theme().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;paypal_webform_theme&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    return array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform_radio' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'element' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;)));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;theme_paypal_webform_radio&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$element&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_add_css&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_path&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'module'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform'&lt;/span&gt;&lt;span style="color: #007700"&gt;) . &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"/css/webform-cc-paypal.css"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$element&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// get the images directory&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$image_dir &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_path&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'module'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'paypal_webform'&lt;/span&gt;&lt;span style="color: #007700"&gt;) . &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"/images/"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$credit_img &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;img class=\"webform-credit-card-image\" src=\"/" &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$image_dir &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"credit-cards.gif\" /&gt;"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$paypal_img &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;img class=\"webform-paypal-image\" src=\"/" &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$image_dir &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"paypal.gif\" /&gt;"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;table class=\"payment-method-paypal-widget\"&gt;&lt;tbody&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;tr&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;td&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;label class=\"paypal-option\" for=\"edit-submitted-payment-method-1\"&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;input type=\"radio\" id=\"edit-submitted-payment-method-1\" name=\"submitted[payment_method]\" value=\"cc_dd\"  checked=\"checked\"  class=\"form-radio\" /&gt; Credit / Debit cards&lt;/label&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/td&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;td class=\"payment-method-paypal-widget-image\"&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$credit_img&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/td&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/tr&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;tr&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;td&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;label class=\"paypal-option\" for=\"edit-submitted-payment-method-2\"&gt;&lt;input type=\"radio\" id=\"edit-submitted-payment-method-2\" name=\"submitted[payment_method]\" value=\"paypal\"   class=\"form-radio\" /&gt; Paypal&lt;/label&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/td&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;td class=\"payment-method-paypal-widget-image\"&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$paypal_img&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/td&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/tr&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/tbody&gt;&lt;/table&gt;\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;strong&gt;images/credit-cards.gif&lt;/strong&gt;
&lt;img /&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;&lt;img src="http://badzilla.co.uk/core/misc/icons/e32700/error.svg" alt="Image removed." title="This image has been removed. For security reasons, only images from the local domain are allowed." height="16" width="16" class="filter-image-invalid" /&gt;&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;&lt;strong&gt;images/paypal.gif&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;&lt;img src="http://badzilla.co.uk/core/misc/icons/e32700/error.svg" alt="Image removed." title="This image has been removed. For security reasons, only images from the local domain are allowed." height="16" width="16" class="filter-image-invalid" /&gt;&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;.module file Configuration&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;You must now copy the button URLs you created in Paypal (and perhaps Sandbox) at the top of the paypal_webform.module code. It should be obvious where they go - they are replacing the two URLS in the $paypal_webform array. In addition, you need to set the enumerator type to either use the Paypal or the Sandbox URL by changing the
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;define&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'PAYPAL_SYSTEM'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;PAYPAL_PRODUCTION&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
accordingly.&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Webform creation&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;You can now make your first webform with Paypal donations available. Below is a sample webform - note the "Select payment method" selection drop down, and the "Payment Response" hidden field.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal3.jpeg?itok=h1r1-Gr5 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Paypal3.jpeg?itok=ACRuzdtH 624w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal3.jpeg?itok=h1r1-Gr5" alt="Paypal3" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Sample Webform&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The "Select payment method" component should be filled in as below, paying particular attention to the ringed values.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal4-edited.png?itok=tAHuxg5c 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Paypal4-edited.png?itok=F87Ft01D 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Paypal4-edited.png?itok=F1lH4G6d 769w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal4-edited.png?itok=tAHuxg5c" alt="Paypal4" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Select payment method&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The "Payment Response" component stores the returned values from Paypal and must be as ringed below.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal5-edited.png?itok=1q3yB9rm 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Paypal5-edited.png?itok=0JLsFEcr 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Paypal5-edited.png?itok=6qMCBPKn 780w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal5-edited.png?itok=1q3yB9rm" alt="Paypal5" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;The Finished Webform&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;If everything has gone well, you should see your completed webform looking something like the image below. If the user selects a Paypal payment type, they will be whisked off to Paypal to effect the payment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select payment method&lt;/strong&gt;&lt;br /&gt;
The "Payment Response" component stores the returned values from Paypal and must be as ringed below.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal6.jpeg?itok=dXeNQbQf 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Paypal6.jpeg?itok=WVEjLIMW 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Paypal6.jpeg?itok=pYmIhK3x 671w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Paypal6.jpeg?itok=dXeNQbQf" alt="Paypal6" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Next Steps&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Due to severe budget constraints, there are a number of activities that weren't completed to my satisfaction, but really aught to be.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As mentioned previously, there is a small dependency on there being another gateway in use (in this case SECPAY) and a radio button is added to provide a choice. It would be good not to have that requirement&lt;/li&gt;
&lt;li&gt;The configuration is messy. At the moment, Paypal button URLs need to be pasted into the PHP code&lt;/li&gt;
&lt;li&gt;Linked to the above concern, there is no convenient way of switching between buttons (i.e. production and sandbox)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These problem areas, as mentioned, were forced due to the lack of complete sponsorship. If you or your organisation would like to pay to have this tidied up, drop me a line&lt;/p&gt;
&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Thu, 05 Jul 2012 18:22:15 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">26 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title>Drupal 6: Silverpop AddRecipient Module</title>
  <link>http://badzilla.co.uk/Drupal-6-Silverpop-AddRecipient-Module</link>
  <description>
&lt;span&gt;Drupal 6: Silverpop AddRecipient Module&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Tue, 26/06/2012 - 17:47&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;This module (which requires the &lt;a href="http://badzilla.co.uk/Drupal-6-Silverpop-XML-API"&gt;Silverpop XML API&lt;/a&gt; module to be installed) provides the facility to add recipients to a Silverpop database. By default this is through a 'Subscribe now' block or node, both of which can be themed. In addition, there is functionality to delete a recipient from a Silverpop database. User permissions (for the nodes) and block permissions (for the blocks) can control the visibility of the forms.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Installation&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Installation is by the usual Drupal mechanism. Once the module is installed, permissions should be set by going to admin/user/permissions. It is important to ensure that these are set correctly to prevent unauthorised access through to the Silverpop API.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Usage&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;To create a form to capture an email address, go to node/add/silverpop-subscribe-now. You will need to provide a title and a database id. This will provide both a unique block and a node. To make the block visible you will need to go to admin/build/block/list and configure as appropriate. The blocks can be identified by their nid or by the titles they were created with.&lt;/p&gt;

&lt;p&gt;Those uses with the correct permissions will see a link to silverpop/remove_recipient in the navigation menu (providing this itself is visible on your system). Use the form from this link to delete email addresses from a database.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Limitations&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;This system captures email addresses which can be useful for newsletters and campaigns. It does not capture other information such as names / titles etc. It would be possible to re-factor the code to do this as an exercise at a later date.&lt;/p&gt;

&lt;p&gt;The RemoveRecipient API call assumes there is only one key, of Email, in the database and will not work should this not be the case.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;silverpop_addrecipient.info&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;version = &lt;span style="color: #ff0000;"&gt;"6.x-1.00"&lt;/span&gt;
name = &lt;span style="color: #ff0000;"&gt;"Silverpop AddRecipient"&lt;/span&gt;
description = &lt;span style="color: #ff0000;"&gt;"Silverpop Add Recipient through a subscribe now form on a block"&lt;/span&gt;
core = &lt;span style="color: #000000;"&gt;6&lt;/span&gt;.x
php = &lt;span style="color: #000000;"&gt;5.2&lt;/span&gt;
package = &lt;span style="color: #ff0000;"&gt;"silverpop"&lt;/span&gt;
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;"silverpop"&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;strong&gt;silverpop_addrecipient.install&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_install().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_install&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_install_schema&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_addrecipient'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_uninstall().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_uninstall&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_uninstall_schema&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_addrecipient'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_schema().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_schema&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$schema&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'fields' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'vid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;            array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'int'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'unsigned' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'not null' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'default' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;            array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'int'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'unsigned' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'not null' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'default' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sp_db' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;          array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'varchar'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'length' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;255&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'not null' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            ),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'unique keys' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid_vid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;        array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'vid'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            ),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'indexes' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;            array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        ),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'primary key' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'vid'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$schema&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;strong&gt;silverpop_addrecipient.module&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Copyright @badzillacouk http://www.badzilla.co.uk&lt;br /&gt;// Licence GPL. This program may be distributed as per the terms of GPL and all credits&lt;br /&gt;// must be retained&lt;br /&gt;//&lt;br /&gt;// If you find this script useful, please consider a donation to help me fund my web presence&lt;br /&gt;// and encourage me to develop more products to be placed under the terms of GPL&lt;br /&gt;// To donate, go to http://www.badzilla.co.uk and click on the donation button&lt;br /&gt;//&lt;br /&gt;// This program is distributed in the hope that it will be useful,&lt;br /&gt;// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Implements hook_node_info().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_node_info&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    return array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_subscribe_now' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'name' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop Subscribe Now Block'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'module' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_addrecipient'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Silverpop Subscribe Now Block to capture new email addresses and add to Silverpop"&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'has_title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title_label' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop Subscribe Now Block Title'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'has_body' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            ),&lt;br /&gt;        );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * implements hook_insert().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_insert&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'INSERT INTO {silverpop_subscribe_now} (vid, nid, sp_db) '&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"VALUES (%d, %d, '%s')"&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vid&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nid&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sp_db&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implements hook_delete().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_delete&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'DELETE FROM {silverpop_subscribe_now} WHERE nid = %d'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * This implementation just handles deleting node revisions.&lt;br /&gt; * Implements hook_nodeapi().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_nodeapi&lt;/span&gt;&lt;span style="color: #007700"&gt;(&amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$teaser&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete revision' &lt;/span&gt;&lt;span style="color: #007700"&gt;and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;type &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_addrecipient'&lt;/span&gt;&lt;span style="color: #007700"&gt;) &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'DELETE FROM {silverpop_subscribe_now} WHERE vid = %d'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * implements hook_update().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_update&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"UPDATE {silverpop_subscribe_now} SET sp_db = '%s'WHERE vid = '%d'"&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sp_db&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_load().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_load&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_fetch_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT * FROM {silverpop_subscribe_now} WHERE vid = %d"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vid&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implements hook_perm()&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_perm&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    return array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'create silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'edit silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'view silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implements hook_access()&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    switch (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'create'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'create silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'update'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'edit silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'view'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'view silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_view().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_view&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$teaser &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$teaser&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;node_prepare&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$teaser&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;content&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'form'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_subscribe_now_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_form().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;250&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title_label&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#weight' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; -&lt;/span&gt;&lt;span style="color: #0000BB"&gt;10&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sp_db'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;255&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop database id'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop database id'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sp_db &lt;/span&gt;&lt;span style="color: #007700"&gt;? &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sp_db &lt;/span&gt;&lt;span style="color: #007700"&gt;: &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#weight' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_block().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_block&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'list'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$delta &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$edit &lt;/span&gt;&lt;span style="color: #007700"&gt;= array()) {&lt;br /&gt;&lt;br /&gt;    switch(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'list'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT n.nid, r.title FROM {node} AS n INNER JOIN {node_revisions} AS r&lt;br /&gt;                             USING (vid) WHERE type = 'silverpop_subscribe_now' AND status = 1"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;            while(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_fetch_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res&lt;/span&gt;&lt;span style="color: #007700"&gt;)) &lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$block&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nid&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'info'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop Subscribe Now: @title [nid:@nid]'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;                                    array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@nid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nid&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;            &lt;br /&gt;            break;&lt;br /&gt;&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'view'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;node_load&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$delta&lt;/span&gt;&lt;span style="color: #007700"&gt;)) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$block&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'content'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_subscribe_now_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$block&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'subject'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            break;&lt;br /&gt;&lt;br /&gt;        default:&lt;br /&gt;            break;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$block&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Forms for user input &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_subscribe_now_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node_params&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email_address'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;255&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Email address'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#size' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;15&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Subscribe'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_subscribe_now_form_validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_subscribe_now_form_submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_subscribe_now_form_validate&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;valid_email_address&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email_address'&lt;/span&gt;&lt;span style="color: #007700"&gt;]))&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;form_set_error&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email_address'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Please enter a valid Email address'&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_subscribe_now_form_submit&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Construct the XML for the Silverpop API call&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;DOMDocument&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list_id &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#parameters'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;2&lt;/span&gt;&lt;span style="color: #007700"&gt;]-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sp_db&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'LIST_ID'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$cfrom_text &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'1'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$cfrom &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'CREATED_FROM'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$column &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'COLUMN'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$name_text &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'EMAIL'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$name &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'NAME'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value_text &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email_address'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'VALUE'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'AddRecipient'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list_id&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$cfrom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$cfrom_text&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$name&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$name_text&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value_text&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$cfrom&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$column&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$column&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$name&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$column&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;module_load_include&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'inc'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_xml'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$addrecipient &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_xml&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    list(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$retcode&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;) = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$addrecipient&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;apicall&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$retcode&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Thanks! You have now been suscribed to the mailing list'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    else if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;is_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;) and &lt;br /&gt;             isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'errorid'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue&lt;/span&gt;&lt;span style="color: #007700"&gt;) and &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'errorid'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #0000BB"&gt;122&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Thanks, but you are already subscribed'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    else&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Sorry, unable to subscribe you at this present time'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_set_message&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_theme().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_theme&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_subscribe_now_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'form' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_remove_recipient_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'form' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;theme_silverpop_subscribe_now_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"To subscribe to our newsletter, please enter your Email address below"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email_address'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output&lt;/span&gt;&lt;span style="color: #007700"&gt;; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_menu().&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_addrecipient_menu&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop/remove_recipient'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop Remove Recipient'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Removal of recipients from Silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'drupal_get_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_remove_recipient_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete silverpop_subscribe_now'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_NORMAL_ITEM&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_remove_recipient_form&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sp_db'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;250&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop database id'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop database id'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sp_db &lt;/span&gt;&lt;span style="color: #007700"&gt;? &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sp_db &lt;/span&gt;&lt;span style="color: #007700"&gt;: &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#weight' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;250&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Email address'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Email address to remove from the Silverpop database'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#weight' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;10&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#weight' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;20&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_remove_recipient_form_submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_remove_recipient_form_validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_remove_recipient_form_validate&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;valid_email_address&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email'&lt;/span&gt;&lt;span style="color: #007700"&gt;]))&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;form_set_error&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Please enter a valid Email address'&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_remove_recipient_form_submit&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Construct the XML for the Silverpop API call&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;DOMDocument&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list_id &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sp_db'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'LIST_ID'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$email_text &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$email &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'EMAIL'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'RemoveRecipient'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list_id&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$email&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$email_text&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$email&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;module_load_include&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'inc'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_xml'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$removerecipient &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_xml&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    list(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$retcode&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;) = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$removerecipient&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;apicall&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$retcode&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Email address succesfully deleted from the specified database'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    else if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;is_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;) and &lt;br /&gt;             isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'errorid'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue&lt;/span&gt;&lt;span style="color: #007700"&gt;) and &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'errorid'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #0000BB"&gt;138&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'The email address you specified does not exist in the Silverpop database'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    else&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Sorry, the removal of the email address failed. Please contact your administrator'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_set_message&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;theme_silverpop_remove_recipient_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"To remove an email address from a Silverpop database, please use the form below"&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'sp_db'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'email'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;]);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_render&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$output&lt;/span&gt;&lt;span style="color: #007700"&gt;; &lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Tue, 26 Jun 2012 16:47:41 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">24 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title>Drupal 6: Silverpop XML API Module</title>
  <link>http://badzilla.co.uk/Drupal-6-Silverpop-XML-API</link>
  <description>
&lt;span&gt;Drupal 6: Silverpop XML API Module&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Tue, 26/06/2012 - 17:40&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;This module integrates Drupal with the Silverpop Engaging Marketing Solutions XML API. So what does it do? On its own, actually very little. It is only of use to developers wishing to write code to interrogate the Silverpop back-end. This module provides the handshaking mechanism between a developer's code and Silverpop. There are currently two published and documented Silverpop APIs, viz SOAP API and XML API. This module has been built to use the XML API. There may well be detail differences between the two APIs so prospective developers should undertake the necessary research to ensure that the XML API delivers to their requirements.&lt;/p&gt;

&lt;p&gt;The module is installed in the normal Drupal way. If you are unsure how to accomplish this, you probably don't have the prerequisite skills yet to use this module. Once it has been installed and enabled it will require configuration at admin/settings/silverpop. You will require login credentials (username and password) for &lt;strong&gt;most&lt;/strong&gt; of the Silverpop API calls (but crucially not all). You will also require the url on the Silverpop system to where the API calls are directed. This is usually of the format api{n}.silverpop.com where {n} is a small integer, but you should check with your Silverpop contact. You should also configure the user permissions for Silverpop administration at admin/user/persmissions.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Using the Interface&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The best way of learning how to use this interface is to check out the function &lt;em&gt;silverpop_get_list_meta_data&lt;/em&gt; which retrieves meta data for a particular Silverpop database. It is included in the &lt;strong&gt;silverpop.module&lt;/strong&gt;. Note: This is the only API call included in this module and can be used with your code for test purposes.&lt;/p&gt;

&lt;p&gt;If you look at the &lt;em&gt;silverpop_get_list_meta_data&lt;/em&gt; function you will note that the XML is constructed using the DOMDocument class. This would be the text book approach to building your own XML, but you could of course just assign strings. When you are constructing this XML, you should not include the Envelope + Body nodes since this module automatically does this for you.&lt;/p&gt;

&lt;p&gt;This module returns an array back to the caller. The first element is a boolean which if TRUE says the call to Silverpop was successful. A NULL/FALSE value says there was a failure. The second array element is the DOMDocument object returned by Silverpop. &lt;em&gt;You do not need to worry about parsing the XML and writing error logs with a returned error diagnostic / code - this module does it for you&lt;/em&gt;. The object is passed back whether there is an error or not in case the calling function needs the information provided in it.&lt;/p&gt;

&lt;p&gt;Should you have any problems, your first port of call should be your Drupal website's error log. All failed calls are entered into the watchdog table and should give you a very good clue as to where the issues are.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Other Silverpop Modules&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;I have written a &lt;a href="http://badzilla.co.uk/Drupal-6-Silverpop-AddRecipient-Module"&gt;Silverpop AddRecipient Module&lt;/a&gt; which uses this module for interfacing with Silverpop.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;silverpop.info&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;version = &lt;span style="color: #ff0000;"&gt;"6.x-1.00"&lt;/span&gt;
name = &lt;span style="color: #ff0000;"&gt;"Silverpop"&lt;/span&gt;
description = &lt;span style="color: #ff0000;"&gt;"Silverpop API Integration module"&lt;/span&gt;
core = &lt;span style="color: #000000;"&gt;6&lt;/span&gt;.x
php = &lt;span style="color: #000000;"&gt;5.2&lt;/span&gt;
package = &lt;span style="color: #ff0000;"&gt;"silverpop"&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;strong&gt;silverpop.module&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Copyright @badzillacouk http://www.badzilla.co.uk&lt;br /&gt;// Licence GPL. This program may be distributed as per the terms of GPL and all credits&lt;br /&gt;// must be retained&lt;br /&gt;//&lt;br /&gt;// If you find this script useful, please consider a donation to help me fund my web presence&lt;br /&gt;// and encourage me to develop more products to be placed under the terms of GPL&lt;br /&gt;// To donate, go to http://www.badzilla.co.uk and click on the donation button&lt;br /&gt;//&lt;br /&gt;// This program is distributed in the hope that it will be useful,&lt;br /&gt;// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Implementation of hook_menu().&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_menu&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'admin/settings/silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop API Settings'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'drupal_get_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_admin_settings_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'administer silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_NORMAL_ITEM&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt; * Implementation of hook_perm().&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_perm&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;    &lt;br /&gt;    return array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'administer silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_admin_settings_form&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_endpoint'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Endpoint'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'The url to the Silverpop API endpoint.'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#size' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;40&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;255&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;variable_get&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_endpoint'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_userid'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Username'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop username.'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#size' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;40&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;255&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;variable_get&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_userid'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_password'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'password'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Password'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Silverpop password.'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#size' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;40&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;255&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;variable_get&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_password'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;system_settings_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_get_list_meta_data&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$listid&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Construct the XML for the Silverpop API call&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;DOMDocument&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list_id &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$listid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'LIST_ID'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'GetListMetaData'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list_id&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$list&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;module_load_include&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'inc'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_xml'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$get_list_meta_data &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_xml&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$get_list_meta_data&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;apicall&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;strong&gt;silverpop_xml.inc&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Copyright @badzillacouk http://www.badzilla.co.uk&lt;br /&gt;// Licence GPL. This program may be distributed as per the terms of GPL and all credits&lt;br /&gt;// must be retained&lt;br /&gt;//&lt;br /&gt;// If you find this script useful, please consider a donation to help me fund my web presence&lt;br /&gt;// and encourage me to develop more products to be placed under the terms of GPL&lt;br /&gt;// To donate, go to http://www.badzilla.co.uk and click on the donation button&lt;br /&gt;//&lt;br /&gt;// This program is distributed in the hope that it will be useful,&lt;br /&gt;// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;class &lt;/span&gt;&lt;span style="color: #0000BB"&gt;silverpop_xml &lt;/span&gt;&lt;span style="color: #007700"&gt;{&lt;br /&gt;&lt;br /&gt;    private &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    private &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$login_required&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    private &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$endpoint&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    private &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$userid&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    private &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$password&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    private &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sessionid&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Silverpop outgoing API call&lt;br /&gt;    // Pass a @body DOMDocument without the Envelope/Body nodes&lt;br /&gt;    // And a TRUE / FALSE depending upon whether a jsession is requred or not&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;public function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;__construct&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$body&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$login_required &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// if we don't have a url, not much point in progressing&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if ((&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;endpoint &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;variable_get&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_endpoint'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;)) == &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;            return array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// ditto credentials if required&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$login_required&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;            if ((&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;userid &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;variable_get&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_userid'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;)) == &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;                return array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;);  &lt;br /&gt;            if ((&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;password &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;variable_get&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop_password'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;)) == &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;                return array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Create the outgoing xml.&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;wrapper &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;_build_envelope&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$body&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;login_required &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$login_required&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Top level API Call - all calling functions must go through this and not the lower-level function&lt;br /&gt;    // Returns an array: First value FALSE or TRUE on success, and second value the DOMDocument response&lt;br /&gt;    // (if converting the response to XML was possible)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;public function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;apicall&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&lt;br /&gt;        if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;login_required&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;            if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;_login&lt;/span&gt;&lt;span style="color: #007700"&gt;())&lt;br /&gt;                return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;_do_call&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&lt;br /&gt;        if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;login_required&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;_logout&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&lt;br /&gt;        return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// build the login call to get the session id&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;private function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;_login&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;DOMDocument&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user_text &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;userid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'USERNAME'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$password_text &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createTextNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;password&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$password &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'PASSWORD'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Login'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user_text&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$password&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$password_text&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$user&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$password&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        list(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$retcode&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;) = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;_do_call&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;_build_envelope&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// extract the sessionid if it is available&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$retcode&lt;/span&gt;&lt;span style="color: #007700"&gt;) &lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;        if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;is_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;) and isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'SESSIONID'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue&lt;/span&gt;&lt;span style="color: #007700"&gt;)) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sessionid &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'SESSIONID'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// build the logout call&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;private function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;_logout&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;DOMDocument&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Logout'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$method&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;_do_call&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;_build_envelope&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$dom&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&lt;br /&gt;        return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// build the xml envelope&lt;br /&gt;    // Pass the inner method and paramters as a DOMDocument&lt;br /&gt;    // Return the stringified xml&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;private function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;_build_envelope&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$inner&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Create the outgoing xml.&lt;br /&gt;        // First create the outer wrapper&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;DOMDocument&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$envelope &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Envelope'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$body_tag &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;createElement&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Body'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$envelope&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$envelope&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$body_tag&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Now insert the passed parameters into this wrapper&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$inner&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;documentElement&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;importNode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;true&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Body'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;appendChild&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;saveXML&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// low level API call not available to clients&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;private function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;_do_call&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;    &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// ok now ready to go&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$data &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"xml=" &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;urlencode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        else&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$data &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"xml=" &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;urlencode&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$wrapper&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// open connection&lt;br /&gt;        // port 80, timeout of 20&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if ((&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock &lt;/span&gt;&lt;span style="color: #007700"&gt;= @&lt;/span&gt;&lt;span style="color: #0000BB"&gt;fsockopen&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;endpoint&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;80&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$errno&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$errstr&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;20&lt;/span&gt;&lt;span style="color: #007700"&gt;)) == &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;watchdog&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Could not connect to host with error number: @errno and diagnostic: @errstr'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;br /&gt;                    array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@errno' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$errno&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@errstr' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$errstr&lt;/span&gt;&lt;span style="color: #007700"&gt;), &lt;/span&gt;&lt;span style="color: #0000BB"&gt;WATCHDOG_ERROR&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;            return array();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// outgoing message&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$jsessionid &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;login_required&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$jsessionid &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;';jsessionid=' &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;sessionid&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fputs&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"POST /servlet/XMLAPI&lt;/span&gt;&lt;span style="color: #007700"&gt;{&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$jsessionid&lt;/span&gt;&lt;span style="color: #007700"&gt;}&lt;/span&gt;&lt;span style="color: #DD0000"&gt; HTTP/1.1\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fputs&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Host: " &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$this&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;endpoint &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fputs&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Content-type: application/x-www-form-urlencoded\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fputs&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Content-length: " &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;strlen &lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$data&lt;/span&gt;&lt;span style="color: #007700"&gt;) . &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fputs&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Connection: close\n\n"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fputs&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$data&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// incoming&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$buffer &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;""&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        while (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;feof&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;))&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$buffer &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fgets&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;fclose&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$sock&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Ok so was there an error? If so, stick it in the log&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if ((&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pos &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;stripos&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$buffer&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&lt;Envelope&gt;'&lt;/span&gt;&lt;span style="color: #007700"&gt;)) === &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;watchdog&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Unspecified error diagnostic. Output dump: @dump'&lt;/span&gt;&lt;span style="color: #007700"&gt;, array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@dump' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$buffer&lt;/span&gt;&lt;span style="color: #007700"&gt;), &lt;/span&gt;&lt;span style="color: #0000BB"&gt;WATCHDOG_ERROR&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;            return array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        } else {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$epos &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;stripos&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$buffer&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&lt;/Envelope&gt;'&lt;/span&gt;&lt;span style="color: #007700"&gt;) + &lt;/span&gt;&lt;span style="color: #0000BB"&gt;strlen&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'&lt;/Envelope&gt;'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$b_body &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;substr&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$buffer&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pos&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$epos &lt;/span&gt;&lt;span style="color: #007700"&gt;- &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pos&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;DOMDocument&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;loadXML&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$b_body&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$success &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'SUCCESS'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$fault &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'FaultString'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$errorid &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'errorid'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;            if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$success&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;length &lt;/span&gt;&lt;span style="color: #007700"&gt;and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;strtoupper&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'SUCCESS'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue&lt;/span&gt;&lt;span style="color: #007700"&gt;) == &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'FALSE'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$err_arr &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'API call failed.'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// did we get an error message?&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$fault&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;length&lt;/span&gt;&lt;span style="color: #007700"&gt;) { &lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;' Diagnostic: @fault'&lt;/span&gt;&lt;span style="color: #007700"&gt;; &lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$err_arr&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@fault'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'FaultString'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue&lt;/span&gt;&lt;span style="color: #007700"&gt;; &lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// did we get an error number?&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$errorid&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;length&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg &lt;/span&gt;&lt;span style="color: #007700"&gt;.= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;' Error code: @errorid'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$err_arr&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'@errorid'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;getElementsByTagName&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'errorid'&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;item&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;)-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeValue&lt;/span&gt;&lt;span style="color: #007700"&gt;; &lt;br /&gt;                }&lt;br /&gt;                    &lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;watchdog&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'silverpop'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$msg&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$err_arr&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;WATCHDOG_ERROR&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;                return array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$response&lt;/span&gt;&lt;span style="color: #007700"&gt;);  &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Tue, 26 Jun 2012 16:40:15 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">23 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title>Drupal 6: user_badges_taxonomy Module</title>
  <link>http://badzilla.co.uk/Drupal-6-user-badges-taxonomy-Module</link>
  <description>
&lt;span&gt;Drupal 6: user_badges_taxonomy Module&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Sun, 15/01/2012 - 20:21&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The motivation for this module came from a shortcoming of the functionality of the &lt;em&gt;user_badges&lt;/em&gt; module and the thread &lt;a href="http://drupal.org/node/1144296"&gt;http://drupal.org/node/1144296&lt;/a&gt; questioning the usage of the vocabulary feature in the user_badges module. It appears that this enables the assignment of badges to users for arbitrary achievements. For instance, a client of mine is a political campaigning organisation and it would be cool to assign badges to those activists who attend campaigns. Similarly, badges could be assigned according to a geographic location (as in my example below) or indeed anything else an administrator can think of. This can be linked to Drupal's taxonomy system - or to be more precise, the terms within a selected vocabulary.&lt;/p&gt;

&lt;p&gt;The problem with &lt;em&gt;user_badges&lt;/em&gt; is there is no mechanism for assigning badges to individuals once a vocabulary has been selected in &lt;em&gt;user_badge&lt;/em&gt; settings. The module I have created below, &lt;em&gt;user_badges_taxonomy&lt;/em&gt; addresses this. The screenshots will guide you through the process, then the source code is listed, and then the tar file is available for download.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-Taxonomy-List.jpeg?itok=6Ex3Up28 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Drupal-Taxonomy-List.jpeg?itok=EoBVYMfz 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Drupal-Taxonomy-List.jpeg?itok=BZUJ5KIw 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2017-09/Drupal-Taxonomy-List.jpeg?itok=CXX0VUkp 1304w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-Taxonomy-List.jpeg?itok=6Ex3Up28" alt="Drupal Taxonomy List" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Firstly, create a new taxonomy vocabulary at admin/content/taxonomy/add/vocabulary. Then create individual taxonomy terms which will reflect the arbitrary badges you intend assigning to your users. The image shows I have chosen geographical location for staff offices, but of course it could be anything and is only limited by your imagination. The list can be seen at admin/content/taxonomy/{tid}&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-Badges-Settings.jpeg?itok=rU-Or649 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Drupal-Badges-Settings.jpeg?itok=ouFdZQwN 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Drupal-Badges-Settings.jpeg?itok=xUIFC2WR 1293w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-Badges-Settings.jpeg?itok=rU-Or649" alt="Settings" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;This vocabulary now needs to be set in user_badges. So go to admin/user/user_badges/settings and click the radio button of the vocabulary you wish to use&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-Badges-Add.jpeg?itok=jT4FT6ZA 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Drupal-Badges-Add.jpeg?itok=l5zyNsu5 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Drupal-Badges-Add.jpeg?itok=EJQSfDV5 1300w, https://assets.badzilla.co.uk/s3fs-public/styles/max_2600x2600/public/2017-09/Drupal-Badges-Add.jpeg?itok=PkeVWznT 1312w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-Badges-Add.jpeg?itok=jT4FT6ZA" alt="Add" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Create the arbitrary badges for achievements by going to admin/user/user_badges/add. There is a drop down selection box to pick the taxonomy term you wish to assign this particular badge&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-Assign-Badge2.jpeg?itok=VpMgY9a6 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Drupal-Assign-Badge2.jpeg?itok=asFzO4ft 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Drupal-Assign-Badge2.jpeg?itok=jCzUDAVL 1291w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-Assign-Badge2.jpeg?itok=VpMgY9a6" alt="Assign 2" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Check that you have permissions to use my &lt;em&gt;user_badges_taxonomy&lt;/em&gt; module by going to admin/user/permissions. Providing you have permission you will be able to navigate to the profile of any user at user/{uid}/badge_taxomony where you will see a list of all the arbitrary achievement badges you have created. These can be selected / deselected as appropriate&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-London-Assigned.jpeg?itok=bKT7CH3I 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Drupal-London-Assigned.jpeg?itok=bJqHnkgn 650w, https://assets.badzilla.co.uk/s3fs-public/styles/max_1300x1300/public/2017-09/Drupal-London-Assigned.jpeg?itok=zTnvu197 1301w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Drupal-London-Assigned.jpeg?itok=bKT7CH3I" alt="London Assigned" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;You can now navigate to user/{uid}/badges (again if you have the correct permissions) and see the fruit of your labour&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;To Do&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;It would be good to assign a userweight to these achievement badges. There is a column in the database table to support this, so that functionality should be added to my code at some stage. In addition it would be cool to show a picture of the badge along with the checkbox to aid those responsible for assigning the badges.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Source Code&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;user_badges_taxonomy.info&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;name = User Badges Taxonomy
description = Assign taxonomy terms to a badge &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; a user&lt;span style="color: #ff0000;"&gt;'s profile. Useful for arbitrary assignment of badges for achievements
dependencies[] = user_badges
core = 6.x&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;strong&gt;user_badges_taxonomy.module&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Copyright @badzillacouk &lt;a href="http://www.badzilla.co.uk&lt;br /&gt;//" title="www.badzilla.co.uk&lt;br /&gt;//"&gt;www.badzilla.co.uk&lt;br /&gt;//&lt;/a&gt; Licence GPL. This program may be distributed as per the terms of GPL and all credits&lt;br /&gt;// must be retained&lt;br /&gt;//&lt;br /&gt;// If you find this script useful, please consider a donation to help me fund my web presence&lt;br /&gt;// and encourage me to develop more products to be placed under the terms of GPL&lt;br /&gt;// To donate, go to &lt;a href="http://www.badzilla.co.uk" title="http://www.badzilla.co.uk"&gt;http://www.badzilla.co.uk&lt;/a&gt; and click on the donation button&lt;br /&gt;//&lt;br /&gt;// This program is distributed in the hope that it will be useful,&lt;br /&gt;// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Implementation of hook_menu().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_badges_taxonomy_menu&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user/%/badge_taxomony'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title'                 &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Assign Achievement Badges'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access callback'       &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_access'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access arguments'      &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'create taxonomy user badges'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page arguments'        &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback'         &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_badges_taxonomy_pre_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type'                  &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_LOCAL_TASK&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'weight'                &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;3&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_perm().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_badges_taxonomy_perm&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    return array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'create taxonomy user badges'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_badges_taxonomy_pre_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$uid&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$nothing &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'There are currently no achievement badges available'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$vid &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;variable_get&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_badges_vid'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Are there any badges with taxonomy terms to display or not?&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_result&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT COUNT(*) FROM {user_badges_badges} WHERE tid &lt;&gt; 0"&lt;/span&gt;&lt;span style="color: #007700"&gt;)))&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$out &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$nothing&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    elseif (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$vid &lt;/span&gt;&lt;span style="color: #007700"&gt;or !&lt;/span&gt;&lt;span style="color: #0000BB"&gt;count&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$tree &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;taxonomy_get_tree&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$vid&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;, -&lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;)))&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$out &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$nothing&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    else &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$out &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_badges_taxonomy_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$tree&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$uid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$out&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_form().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_badges_taxonomy_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$tree&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$uid&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$options &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$defaults &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// create the checkbox list by looping through the tree&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;foreach(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$tree &lt;/span&gt;&lt;span style="color: #007700"&gt;as &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$branch&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;            if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$obj &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_fetch_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT bid, name FROM {user_badges_badges} WHERE tid = %d"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$branch&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;tid&lt;/span&gt;&lt;span style="color: #007700"&gt;))) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$options&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$obj&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;bid&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$obj&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;name&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// set default after checking db&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_result&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT COUNT(*) FROM {user_badges_badges} &lt;br /&gt;                                        INNER JOIN {user_badges_user} USING (bid)&lt;br /&gt;                                        WHERE bid = %d AND uid = %d"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$obj&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;bid&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$uid&lt;/span&gt;&lt;span style="color: #007700"&gt;)))&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$defaults&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$obj&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;bid&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$obj&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;bid&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'terms'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'checkboxes'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#options' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$options&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Achievement Badges'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$defaults&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );  &lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'user_badges_taxonomy_form_submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_badges_taxonomy_form_submit&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// loop through all the badges and set / unset as applicable&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;foreach(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'terms'&lt;/span&gt;&lt;span style="color: #007700"&gt;] as &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$key &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// Determine whether currently exists&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$count &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_result&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT COUNT(*) FROM {user_badges_user} WHERE uid = %d AND bid = %d"&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;                                &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#parameters'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;3&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$key&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// four possible situations:&lt;br /&gt;        // 1. no db row and not checked = do nothing&lt;br /&gt;        // 2. no db row and checked = add record&lt;br /&gt;        // 3. db row and not checked = delete record&lt;br /&gt;        // 4. db row and checked = do nothing&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;if (!&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$count &lt;/span&gt;&lt;span style="color: #007700"&gt;and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"INSERT INTO {user_badges_user} SET uid = %d, bid = %d, type = 'Vocabulary'"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#parameters'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;3&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$key&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$count &lt;/span&gt;&lt;span style="color: #007700"&gt;and !&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$value&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"DELETE FROM {user_badges_user} WHERE uid = %d AND bid = %d"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#parameters'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;3&lt;/span&gt;&lt;span style="color: #007700"&gt;], &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$key&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_set_message&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Changes made to the achievement badges'&lt;/span&gt;&lt;span style="color: #007700"&gt;));&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/php" hreflang="en"&gt;PHP&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Sun, 15 Jan 2012 20:21:29 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">27 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title>Drupal 6: Programmatically Remove Required Field Property from Form</title>
  <link>http://badzilla.co.uk/Drupal-6-Programmatically-Remove-Required-Field-Property-from-Form</link>
  <description>
&lt;span&gt;Drupal 6: Programmatically Remove Required Field Property from Form&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Sat, 19/11/2011 - 09:12&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Suppose you are coding a form in Drupal 6 and you have a mandatory (required) field. However, this required field is only mandatory dependent upon the value in another field. This can happen quite often, and I encountered it at a client site the other day. We had a postcode field that was mandatory only if the country in a selection box was set to 'United Kingdom'. Any other country meant that the postcode field was not required.&lt;/p&gt;

&lt;p&gt;So how do we code this? The solution required a little bit of consideration and there are two prongs of attack. Firstly, there is a need to change the validation rule once the form is submitted using the &lt;strong&gt;['#after_build']&lt;/strong&gt; index in the $form array. Secondly, we need to do some client side work to hide or show the asterisk which denotes a required field dependent upon what the selection box is showing. This needs a couple lines of Javascript / jQuery.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;The Code&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;remove_required_property.info&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;name = &lt;span style="color: #ff0000;"&gt;"Remove Required Property"&lt;/span&gt;
description = &lt;span style="color: #ff0000;"&gt;"Tutorial Code to Programmatically Remove the Required Property of a Form Field"&lt;/span&gt;
core = &lt;span style="color: #000000;"&gt;6&lt;/span&gt;.x
php = &lt;span style="color: #000000;"&gt;5.2&lt;/span&gt;
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;"location"&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Since we are using a drop down selection box with a list of countries we will need to use the location module API.&lt;br /&gt;
&lt;strong&gt;remove_required_property.module&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_menu().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;remove_required_property_menu&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'required-property'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Programmatically Remove Required Property From Form Field'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'drupal_get_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'remove_required_property_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'access callback' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;MENU_NORMAL_ITEM&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$items&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;remove_required_property_form&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-postcode'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;20&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#size' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;20&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Postcode'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#attributes' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'class' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'donation-your-details-field-text-input'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;module_exists&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'location'&lt;/span&gt;&lt;span style="color: #007700"&gt;) and (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$countries &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;location_get_iso3166_list&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;))) &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-country'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'select'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Country'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#options' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$countries&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#attributes' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'onChange' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'postcode_required()'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'uk' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'uk'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        );    &lt;br /&gt;    else &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;watchdog&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'remove_required_property'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Unable to load list of countries'&lt;/span&gt;&lt;span style="color: #007700"&gt;), &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;WATCHDOG_ERROR&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Submit'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#after_build'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'remove_required_property_form_after_build'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;][] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'remove_required_property_form_validate'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;   &lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;There are a few noteworthy comments about this section of the code. I'm loading the countries using the location module &lt;em&gt;location_get_iso3166_list&lt;/em&gt; call - obviously if your requirement doesn't need a selection box you can skip this! I have added an &lt;strong&gt;'#attributes'&lt;/strong&gt; index into the $form array to load a call to the JavaScript function &lt;em&gt;postcode_required()&lt;/em&gt; which is invoked on every change of the drop down selection box. Finally, there is the aforementioned &lt;strong&gt;'#after_build'&lt;/strong&gt; reference which will check the submitted values and where we can manipulate the validation rules.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;remove_required_property_form_after_build&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (isset(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#post'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-country'&lt;/span&gt;&lt;span style="color: #007700"&gt;]) &lt;br /&gt;        and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#post'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-country'&lt;/span&gt;&lt;span style="color: #007700"&gt;] != &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'' &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#post'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-country'&lt;/span&gt;&lt;span style="color: #007700"&gt;] != &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'uk'&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-postcode'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;remove_required_property_form_validate&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// postcode. Required if the country is UK&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-postcode'&lt;/span&gt;&lt;span style="color: #007700"&gt;] == &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'' &lt;/span&gt;&lt;span style="color: #007700"&gt;and &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'values'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-country'&lt;/span&gt;&lt;span style="color: #007700"&gt;] == &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'uk'&lt;/span&gt;&lt;span style="color: #007700"&gt;) &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;form_set_error&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'your-details-postcode'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'You must specify a postcode for addresses within the United Kingdom'&lt;/span&gt;&lt;span style="color: #007700"&gt;)); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_form_alter().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;remove_required_property_form_alter&lt;/span&gt;&lt;span style="color: #007700"&gt;(&amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_state&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form_id &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'remove_required_property_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$mod_path &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_get_path&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'module'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'remove_required_property'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_add_js&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/span&gt;&lt;span style="color: #007700"&gt;{&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$mod_path&lt;/span&gt;&lt;span style="color: #007700"&gt;}&lt;/span&gt;&lt;span style="color: #DD0000"&gt;/js/rrp.js"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_add_css&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/span&gt;&lt;span style="color: #007700"&gt;{&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$mod_path&lt;/span&gt;&lt;span style="color: #007700"&gt;}&lt;/span&gt;&lt;span style="color: #DD0000"&gt;/css/rrp.css"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The function &lt;em&gt;remove_required_property_form_alter()&lt;/em&gt; is the opportunity to check what has been submitted and if the country is not uk then I don't need the &lt;strong&gt;'#required'&lt;/strong&gt; property so it can be set to NULL. The &lt;em&gt;remove_required_property_form_validate()&lt;/em&gt; function is where I do the validation of the postcode - note I'm only checking whether the field is empty or not here. In a live production system something more robust would be required. I use &lt;em&gt;hook_form_alter&lt;/em&gt; as an opportunity to load the JavaScript and the CSS.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_theme().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;remove_required_property_theme&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    return array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'remove_required_property_form' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'template' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'includes/remove_required_property_form'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'arguments' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'form' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;)));&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
Finally we need a call to hook_theme to set the form to an external template. This will be needed since we are going to have to munge the Drupal generated HTML code.&lt;br /&gt;
&lt;strong&gt;includes/remove_required_property_form.tpl.php&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;table&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;tbody&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;tr&lt;/span&gt; &lt;span style="color: #007800;"&gt;class&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;"rrp-table-padding"&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;td &lt;span style="color: #007800;"&gt;class&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;"rrp-field-text rrp-your-details-leftcell"&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
            &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;?php 
                &lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt; Postcode
                &lt;span style="color: #007800;"&gt;$output&lt;/span&gt; = drupal_render&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #007800;"&gt;$form&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'your-details-postcode'&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;;
                &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;preg_match&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;"#(.*)(&lt;input.*)#mis"&lt;/span&gt;, &lt;span style="color: #007800;"&gt;$output&lt;/span&gt;, &lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;
                    print str_replace&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;"&lt;span "&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;"&lt;span id=&lt;span style="color: #000099; font-weight: bold;"&gt;\"&lt;/span&gt;rrp-postcode-required&lt;span style="color: #000099; font-weight: bold;"&gt;\"&lt;/span&gt; "&lt;/span&gt;, &lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;;
                error_log&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;;
            ?&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;td&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
 
        &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;td&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
            &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;div &lt;span style="color: #007800;"&gt;class&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;"rrp-textfield"&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
                &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;?php &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;isset&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt; print &lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;; ?&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
            &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;div&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;td&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;tr&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
 
    &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;tr&lt;/span&gt; &lt;span style="color: #007800;"&gt;class&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;"rrp-table-padding"&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;td &lt;span style="color: #007800;"&gt;class&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;"rrp-field-text rrp-your-details-leftcell"&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
            &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;?php 
                &lt;span style="color: #000000; font-weight: bold;"&gt;//&lt;/span&gt; Country
                &lt;span style="color: #007800;"&gt;$output&lt;/span&gt; = drupal_render&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #007800;"&gt;$form&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'your-details-country'&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;;
                &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;preg_match&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;"#(.*)(&lt;select.*)#mis"&lt;/span&gt;, &lt;span style="color: #007800;"&gt;$output&lt;/span&gt;, &lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;
                    print &lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;;  
            ?&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;td&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
 
        &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;td&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
            &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;div &lt;span style="color: #007800;"&gt;class&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;"rrp-select"&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
                &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;?php &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;isset&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt; print &lt;span style="color: #007800;"&gt;$match&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt;; ?&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
            &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;div&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
        &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;td&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;tr&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
 
&lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;tbody&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;&lt;/&lt;/span&gt;table&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;&lt;&lt;/span&gt;?php print drupal_render&lt;span style="color: #7a0874; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: #007800;"&gt;$form&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;)&lt;/span&gt;; ?&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The form's template file presents an opportunity to tabulate the data and make it a little more user friendly. The first requirement is to insert a css tag for the 'required' asterisk. The problem with Drupal 'required' asterisks is they do not have &lt;em&gt;id&lt;/em&gt; tags to aid uniqueness so we need to add one with the id of &lt;em&gt;rrp-postcode-required&lt;/em&gt; using the PHP &lt;em&gt;str_replace&lt;/em&gt; function. Also note I'm calling &lt;em&gt;drupal_render&lt;/em&gt; on individual form elements - this marks each one as printed, and then finally I issue another call to &lt;em&gt;drupal_render&lt;/em&gt;which will print any form elements not already output - in this case the submit button which falls outside of the HTML table.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;js/rrp.js&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="javascript geshifilter-javascript" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;function&lt;/span&gt; postcode_required&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
 
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;$&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;'#edit-your-details-country'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;val&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;'uk'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
        $&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;'#rrp-postcode-required'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;show&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;
        $&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;'#rrp-postcode-required'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;hide&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
 
&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;The very simple JavaScript is called whenever the drop down selection box's value is changed. It will look at the current value, and if it is 'uk' then ensure that the asterisk is displayed, else ensure it is hidden.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;css/rrp.css&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="css geshifilter-css" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #cc00cc;"&gt;#rrp-postcode-required&lt;/span&gt; &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;visibility&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #993333;"&gt;visible&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;    
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
Some even simpler CSS. The rrp-postcode-required tag is set to initially visible when the form is loaded.&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
      &lt;div class="field field--name-field-blog-youtube field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;Screen Images&lt;/div&gt;
      
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Required1.png?itok=gsiR6KHv 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Required1.png?itok=cxv3U7hn 630w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Required1.png?itok=gsiR6KHv" alt="Required1" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;&lt;strong&gt;Remove Required Property - UK Selected, Asterisk on Postcode&lt;/strong&gt;&lt;br /&gt;
The second image shows that the asterisk is now hidden because the country has been changed.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
      &lt;div class="field field--name-field-blog-image field--type-image field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;    &lt;img srcset="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Required2.png?itok=kEoFDJvj 325w, https://assets.badzilla.co.uk/s3fs-public/styles/max_650x650/public/2017-09/Required2.png?itok=ssDU1xve 600w" sizes="(min-width: 1290px) 1290px, 100vw" src="https://assets.badzilla.co.uk/s3fs-public/styles/max_325x325/public/2017-09/Required2.png?itok=kEoFDJvj" alt="Required2" typeof="foaf:Image" class="img-responsive" /&gt;


&lt;/div&gt;
          &lt;/div&gt;
  
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;&lt;strong&gt;Remove Required Property - UK Not Selected, No Asterisk on Postcode&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Sat, 19 Nov 2011 09:12:23 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">28 at http://badzilla.co.uk</guid>
    </item>
<item>
  <title>Drupal 6: Programmatically Create Panels and Nodes in Panels</title>
  <link>http://badzilla.co.uk/drupal-6-programmatically-create-panels-and-nodes-panels</link>
  <description>
&lt;span&gt;Drupal 6: Programmatically Create Panels and Nodes in Panels&lt;/span&gt;

&lt;span&gt;&lt;span lang="" about="http://badzilla.co.uk/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;nigel&lt;/span&gt;&lt;/span&gt;

&lt;span&gt;Sat, 23/07/2011 - 09:33&lt;/span&gt;

      &lt;div class="field field--name-field-heading-image-text field--type-entity-reference-revisions field--label-hidden field--items"&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;This tutorial provides the wherewithal to create a new node and insert that node in the top pane on a programmatically created Panel. Looking around the net I was surprised that nobody has done this before. The context for my requirements comes from a not-for-profit client of mine - they wanted to be able to create a new type of charitable donation dependent upon a campaign's remit (this would be the node) and then to place that campaign information (node) in the top pane of the panel. The staff working at the not-for-profit are very talented Drupal-ers and would be able to place supporting static HTML blocks around the node on the panel once they've created the node and the panel.&lt;/p&gt;

&lt;p&gt;The inspiration on how to do this comes from analysing the output of the &lt;em&gt;Bulk Exporter&lt;/em&gt; utility. To see how this works, create a test panel using your chosen layout and place a test node of type Story on the uppermost pane, go to &lt;em&gt;admin/build/bulkexport&lt;/em&gt;, click on the panel you just created, give it a module name, then export. The most significant part of the exported code is the &lt;em&gt;hook_default_page_manager_pages&lt;/em&gt; - this does the heavy lifting, creating the handler, page, display and pane classes. So any module we develop in this tutorial will have to implement this hook.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;For the Impatient - the Code&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;strong&gt;donation_campaign.info&lt;/strong&gt;
&lt;div class="geshifilter"&gt;&lt;div class="bash geshifilter-bash" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;name = &lt;span style="color: #ff0000;"&gt;"Donation Campaign"&lt;/span&gt;
description = &lt;span style="color: #ff0000;"&gt;"Donation Campaign based around Panels"&lt;/span&gt;
core = &lt;span style="color: #000000;"&gt;6&lt;/span&gt;.x
php = &lt;span style="color: #000000;"&gt;5.2&lt;/span&gt;
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;"panels"&lt;/span&gt;
dependencies&lt;span style="color: #7a0874; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;]&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;"page_manager"&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;strong&gt;donation_campaign.install&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_install().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_install&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_install_schema&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_uninstall().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_uninstall&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_uninstall_schema&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_schema().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_schema&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$schema&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'fields' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'vid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;            array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'int'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'unsigned' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'not null' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'default' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;            array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'int'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'unsigned' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'not null' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'default' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'panel_data' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;     array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'text'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'not null' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            ),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'unique keys' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid_vid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;        array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'vid'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            ),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'indexes' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt;            array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        ),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'primary key' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'vid'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$schema&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;strong&gt;donation_campaign.module&lt;/strong&gt;
&lt;div class="codeblock geshifilter"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implements hook_node_info().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_node_info&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    return array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'donation_campaign' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'name' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Donation Campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'module' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'description' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"Donation Campaign based on the Panels module technology"&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'has_title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title_label' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Donation Campaign Title'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'has_body' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'body_label' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;t&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'Donation Preamble'&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;            ),&lt;br /&gt;        );&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_form().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_form&lt;/span&gt;&lt;span style="color: #007700"&gt;(&amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;node_get_types&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'type'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;has_title&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#type' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'textfield'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#maxlength' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;250&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;check_plain&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title_label&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#required' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#default_value' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;check_plain&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title&lt;/span&gt;&lt;span style="color: #007700"&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'#weight' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; -&lt;/span&gt;&lt;span style="color: #0000BB"&gt;5&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;has_body&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'body'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;node_body_field&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;body_label&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$type&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;min_word_count&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$form&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implements hook_perm()&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_perm&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&lt;br /&gt;    return array(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'create donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'edit donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'view donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;    );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implements hook_access()&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    switch (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'create'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'create donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'update'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'edit donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        case &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'view'&lt;/span&gt;&lt;span style="color: #007700"&gt;:&lt;br /&gt;            return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;user_access&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'view donation_campaign'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$account&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* implements hook_insert().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_insert&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'INSERT INTO {donation_campaign} (vid, nid) '&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #007700"&gt;.&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"VALUES (%d, %d)"&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vid&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// create the panel if everything looks ok&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #007700"&gt;if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;path &lt;/span&gt;&lt;span style="color: #007700"&gt;and (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;strpos&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;path&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'/'&lt;/span&gt;&lt;span style="color: #007700"&gt;) === &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;)) {&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// now construct and save the panel data&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;stdClass&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$uscore_title &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;str_replace&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;' '&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'_'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;disabled &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;; &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;api_version &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;name &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$uscore_title&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;task &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;admin_title &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;admin_description &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;path &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'donate/' &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;path&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;access &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;menu &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;arguments &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;conf &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;default_handlers &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;stdClass&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;disabled &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;FALSE&lt;/span&gt;&lt;span style="color: #007700"&gt;; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;/* Edit this to true to make a default handler disabled initially */&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;api_version &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;name &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page_' &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$uscore_title &lt;/span&gt;&lt;span style="color: #007700"&gt;. &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'_panel_context'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;task &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;subtask &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$uscore_title&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;handler &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'panel_context'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;weight &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;conf &lt;/span&gt;&lt;span style="color: #007700"&gt;= array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'no_blocks' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'pipeline' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'standard'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'css_id' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'css' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'contexts' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(),&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'relationships' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(),&lt;br /&gt;        );&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;panels_display&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;layout &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'twocol'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;layout_settings &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;panel_settings &lt;/span&gt;&lt;span style="color: #007700"&gt;= array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'style_settings' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; array(&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'default' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'left' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'right' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            ),&lt;br /&gt;        );&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;cache &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;content &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;panels &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane &lt;/span&gt;&lt;span style="color: #007700"&gt;= new &lt;/span&gt;&lt;span style="color: #0000BB"&gt;stdClass&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;pid &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'new-1'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;panel &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'left'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;type &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'node'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;subtype &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'node'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;shown &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;TRUE&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;access &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;configuration &lt;/span&gt;&lt;span style="color: #007700"&gt;= array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'nid' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/span&gt;&lt;span style="color: #007700"&gt;{&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nid&lt;/span&gt;&lt;span style="color: #007700"&gt;}&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'links' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'leave_node_title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'identifier' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'build_mode' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'full'&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'link_node_title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'override_title' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'override_title_text' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #DD0000"&gt;''&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        );&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;cache &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;style &lt;/span&gt;&lt;span style="color: #007700"&gt;= array(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'settings' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;NULL&lt;/span&gt;&lt;span style="color: #007700"&gt;,&lt;br /&gt;        );&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;css &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;extras &lt;/span&gt;&lt;span style="color: #007700"&gt;= array();&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;position &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;content&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'new-1'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pane&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;panels&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'left'&lt;/span&gt;&lt;span style="color: #007700"&gt;][&lt;/span&gt;&lt;span style="color: #0000BB"&gt;0&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'new-1'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;hide_title &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;PANELS_TITLE_FIXED&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;title_pane &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'new-1'&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;conf&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'display'&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$display&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;default_handlers&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;name&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$handler&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"UPDATE {donation_campaign} SET panel_data = '%s' WHERE vid = %d"&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;serialize&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;), &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;menu_rebuild&lt;/span&gt;&lt;span style="color: #007700"&gt;();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_default_page_manager_pages().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_default_page_manager_pages&lt;/span&gt;&lt;span style="color: #007700"&gt;() {  &lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;"SELECT panel_data FROM {donation_campaign} INNER JOIN {node} USING (vid) WHERE `status` = 1"&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    while(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_fetch_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$ret&lt;/span&gt;&lt;span style="color: #007700"&gt;)) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;unserialize&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$res&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;panel_data&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pages&lt;/span&gt;&lt;span style="color: #007700"&gt;[&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;name&lt;/span&gt;&lt;span style="color: #007700"&gt;] = &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$pages&lt;/span&gt;&lt;span style="color: #007700"&gt;;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* implements hook_update().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_update&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;revision&lt;/span&gt;&lt;span style="color: #007700"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_insert&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #FF8000"&gt;//else &lt;br /&gt;    //    db_query("UPDATE {donation_campaign} SET WHERE vid = %d",&lt;br /&gt;    //        $node-&gt;vid);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_ctools_plugin_api().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_ctools_plugin_api&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$module&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$api&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$module &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'page_manager' &lt;/span&gt;&lt;span style="color: #007700"&gt;&amp;&amp; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$api &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'pages_default'&lt;/span&gt;&lt;span style="color: #007700"&gt;) &lt;br /&gt;        return array(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'version' &lt;/span&gt;&lt;span style="color: #007700"&gt;=&gt; &lt;/span&gt;&lt;span style="color: #0000BB"&gt;1&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implements hook_delete().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_delete&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'DELETE FROM {donation_campaign} WHERE nid = %d'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;nid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* This implementation just handles deleting node revisions.&lt;br /&gt;* Implements hook_nodeapi().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_nodeapi&lt;/span&gt;&lt;span style="color: #007700"&gt;(&amp;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$teaser&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$page&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    if (&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$op &lt;/span&gt;&lt;span style="color: #007700"&gt;== &lt;/span&gt;&lt;span style="color: #DD0000"&gt;'delete revision'&lt;/span&gt;&lt;span style="color: #007700"&gt;) &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'DELETE FROM {donation_campaign} WHERE vid = %d'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #FF8000"&gt;/**&lt;br /&gt;* Implementation of hook_load().&lt;br /&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;donation_campaign_load&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$result &lt;/span&gt;&lt;span style="color: #007700"&gt;= &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_query&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #DD0000"&gt;'SELECT * FROM {donation_campaign} WHERE vid = %d'&lt;/span&gt;&lt;span style="color: #007700"&gt;, &lt;/span&gt;&lt;span style="color: #0000BB"&gt;$node&lt;/span&gt;&lt;span style="color: #007700"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;vid&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;&lt;br /&gt;    return &lt;/span&gt;&lt;span style="color: #0000BB"&gt;db_fetch_object&lt;/span&gt;&lt;span style="color: #007700"&gt;(&lt;/span&gt;&lt;span style="color: #0000BB"&gt;$result&lt;/span&gt;&lt;span style="color: #007700"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
              &lt;div class="field--item"&gt;  &lt;div class="paragraph paragraph--type--blog-heading-picture-text paragraph--view-mode--default"&gt;
          
            &lt;div class="field field--name-field-heading field--type-string field--label-hidden field--item"&gt;For the Relaxed - the Explanation&lt;/div&gt;
      
            &lt;div class="field field--name-field-blog-text field--type-text-long field--label-hidden field--item"&gt;&lt;p&gt;Those who develop Drupal modules which create new content types should be very familiar with the basic layout of the code, and there is little to be gained from a step-by-step analysis of that aspect of the code. Those wishing to find out more should check out &lt;a href="http://www.amazon.co.uk/gp/product/1847194443/ref=as_li_tf_tl?ie=UTF8&amp;tag=upcomingfilms-21&amp;linkCode=as2&amp;camp=1634&amp;creative=6738&amp;creativeASIN=1847194443"&gt;Learning Drupal 6 Module Development&lt;/a&gt; or &lt;a href="http://www.amazon.co.uk/gp/product/1849511160/ref=as_li_tf_tl?ie=UTF8&amp;tag=upcomingfilms-21&amp;linkCode=as2&amp;camp=1634&amp;creative=6738&amp;creativeASIN=1849511160"&gt;Drupal 7 Module Development&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the installation source code you will note I have created a field &lt;em&gt;panel_data&lt;/em&gt; - this will become a holding area for the serialized page class that contains all the panel information. In reality, there would be additional fields in the table for other functionality, but since this is just a proof of concept test, I have omitted this meta data.&lt;/p&gt;

&lt;p&gt;Now look at the module file. After we insert the new node into the database we create the panel using the same sequence of class instantiation as we saw from the bulk exporter. This is saved in the field we just discussed. Note that the layout is hard coded in the $display as two columns. If you need to use a different layout, you should create a sample panel the normal way, then export it using bulk exporter, then copy and paste the $display code over what I have here. In addition, you will need to change the &lt;em&gt;$pane-&gt;panel&lt;/em&gt; value.&lt;/p&gt;

&lt;p&gt;Once the panel_data is saved we need to rebuild the menus for what we have to take effect so we issue a &lt;em&gt;menu_rebuild();&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We need to implement &lt;em&gt;hook_default_page_manager_pages&lt;/em&gt; - but instead of the hard coded data we see in the example from the bulk exporter, we retrieve the page classes from the panel_data field and unserialize, saving in a array to be returned once all the pages have been retrieved.&lt;/p&gt;

&lt;p&gt;Finally, &lt;em&gt;hook_update&lt;/em&gt; will need to be changed dependent upon your circumstances. You will need to add your own meta information to the commented out database update call.&lt;/p&gt;&lt;/div&gt;
      
      &lt;/div&gt;
&lt;/div&gt;
          &lt;/div&gt;
  
  &lt;div class="field field--name-field-blog-terms field--type-entity-reference field--label-inline"&gt;
    &lt;div class="field--label"&gt;blog terms&lt;/div&gt;
          &lt;span class="field__items"&gt;
              &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal" hreflang="en"&gt;Drupal&lt;/a&gt;&lt;/span&gt;
          &lt;span class="field--item"&gt;&lt;a href="http://badzilla.co.uk/drupal6" hreflang="en"&gt;Drupal 6&lt;/a&gt;&lt;/span&gt;
              &lt;/span&gt;
      &lt;/div&gt;
</description>
  <pubDate>Sat, 23 Jul 2011 08:33:10 +0000</pubDate>
    <dc:creator>nigel</dc:creator>
    <guid isPermaLink="false">29 at http://badzilla.co.uk</guid>
    </item>

  </channel>
</rss>
