SoundPost Media SoundPost Media - Rick Manelius http://soundpostmedia.com/rss.xml</link> http://soundpostmedia.com</link> en 2018-05-26T03:27:54+00:00 2018-05-26T03:27:54+00:00 1800 Drupal PCI Compliance White Paper—Officially Released! <h3> Quick links:</h3> <ul> <li> <a href="http://drupalpcicompliance.org/files/DrupalPCICompliance.pdf">Download the white paper</a>.</li> <li> Visit the <a href="http://drupalpcicompliance.org/">Drupal PCI compliance white paper website</a>.</li> <li> View the <a href="http://www.prweb.com/releases/2013/7/prweb10929591.htm">press release</a>.</li> </ul> <p>Seven months ago I posted <a href="http://soundpostmedia.com/article/lets-talk-about-pci-compliance-ubercart-and-drupal-commerce">a lengthy article</a> regarding PCI Compliance for Drupal. It was an MVP of sorts (Minimum Viable Post). The goal was to test the waters to see if I could gain enough interest and support to justify spending the time to create a white paper to help bring clarity to a complex and misunderstood topic. 2000+ page views and 20+ comments later, I knew that I struck a chord with enough people to take the leap, and so here we are today with a delivered contribution back to the community.</p> <h2 id="why-should-you-care"> Why should you care?</h2> <p>Every eCommerce website that accepts credit or debit card transactions has a contractual obligation to become and remain PCI compliant (with fines and penalties if you&#39;re not compliant if a security breach occurs). And while Drupal makes it trivial to spin up a basic eCommerce website, anecdotal evidence suggested that only a subset of the community was even aware of this requirement. A smaller subset of that recognized that it was a problem. And finally, an even smaller subset knew what to do in order to become compliant. Therefore, I believed we were facing three problems:</p> <ol> <li> A lack of awareness (of the requirements themselves).</li> <li> A lack of acknowledgement (of the importance of compliance).</li> <li> A lack of guidance (specific to Drupal community on how to meet the requirements).</li> </ol> <p>In fact, I personally experienced all three stages.&nbsp;I had operated a Drupal eCommerce website for almost 2 years without knowing even the most basic fundamentals regarding PCI compliance. When the reality finally hit me, I was stressed to the max trying to figure this all out on my own because there were very few resources within the community. My hope is that this white paper is the very thing would have prevented me from getting into that mess into the first place!</p> <h2 id="solving-the-problems"> Solving the Problems</h2> <p>Addressing the three problems was no easy task. If the paper was too technical, it would only be understood by developers and website owners would remain in the dark. However, making it too long and all encompassing would create a high barrier to entry with respect to people reading and understanding it. So we had to start off with some basic objectives:</p> <ul> <li> <strong><em>Readable:</em></strong> It should be easily understood by Drupal developers, shops, and evaluators.</li> <li> <strong><em>Multiple Formats:</em></strong> It should be available in a printable pdf as well as markdown for easy inclusion into Drupal modules.</li> <li> <strong><em>Free:</em></strong> In order to get it into as many hands as possible, there should be no barrier to obtain it.</li> <li> <strong><em>Short:</em></strong> A person should be able to read the entire paper is less than an hour (preferably less than 30 minutes).</li> <li> <strong><em>Credible:</em></strong> The paper should be as accurate as possible in the information presented.</li> </ul> <p>We believe we&#39;ve hit all of these goals. We sent the paper out to numerous reviewers (technical and otherwise) to make sure the information was not overly difficult to read. We created the document in markdown and provided instructions on conversion to markdown and pdf. We hosted the document on a public github repo and public facing website where anyone can download the report for free. We almost kept the document to 15 pages (20 pages isn&#39;t too bad!)</p> <p>With respect to credibility, I was fortunate enough to enlist the help of two amazing co-authors: <a href="http://www.knaddison.com/">Greg Knaddison</a> and <a href="http://www.appliedtrust.com/company/bios/ned-mcclain">Ned McClain</a>. Greg is the Drupal Security team lead and author of <a href="http://crackingdrupal.com/"><em>Cracking Drupal</em></a>. Ned is the co-owner and co-founder of <a href="http://www.appliedtrust.com/">AppliedTrust</a>, a company that has extensive knowledge in both Drupal and security standards, such as PCI and HIPAA compliance. Both brought a tremendous amount of experience and domain knowledge that was critical in improving the accuracy or the report.</p> <p>Given all that, I believe we achieved the goals we set out for and that this white paper will be a valuable resource to the Drupal eCommerce community.</p> <h2 id="sponsors"> Sponsors</h2> <p>This project easily took over a hundred hours (probably closer to two hundred) to put together on top of the time it took to learn all the nuances of <a href="https://www.pcisecuritystandards.org/">PCI compliance</a> in the first place. Therefore, in order to allot the time and still keep this information free, I reached out to several companies for sponsorship. I wanted to publically thank them one more time for supporting this project.</p> <ul> <li> <a href="https://www.card.com/">CARD.com</a></li> <li> <a href="http://www.appliedtrust.com/">AppliedTrust</a></li> <li> <a href="http://crossfunctional.net/">CrossFunctional</a></li> <li> <a href="http://commerceguys.com/">Commerce Guys</a></li> <li> <a href="http://www.newmediadenver.com/">NEWMEDIA</a></li> <li> <a href="http://www.hostedpci.com/">HostedPCI</a></li> <li> <a href="http://www.copperly.com/">Copperly</a></li> </ul> <h2 id="the-joy-of-contributing"> On Contributing</h2> <p>I started becoming active in the Drupal Community after being inspired by a DrupalCamp Colorado presentation by webchick in 2011 about the importance of giving back to the community. After that point, I definitely tried as best I could: I was active in the issue queues, I was attending meetups, and I was helping mentor new members of the community. However, I never felt like I was able to contribute something back of significance that compared to the Dave Reid&#39;s of the community (I mean the guy maintains over 50 modules!)</p> <p>This project was very different. It was the first time where I felt I could contribute something back to the community that was unique. And while it has been a long, hard road, it has been both personally and professionally rewarding to see the impact it&#39;s already had on those that have read it. Needless to say, I&#39;m excited to find the next Drupal project to continue contributing back to the community!</p> http://soundpostmedia.com/article/drupal-pci-compliance-white-paper-officially-released</link> http://soundpostmedia.com/article/drupal-pci-compliance-white-paper—officially-released 2013-07-23T07:26:00+00:00 Comparing PCI Compliance Considerations Among Ubercart and Drupal Commerce Payment Gateways <p>Selecting an appropriate payment gateway is one of the most important choices to make when designing, building, and maintaining an eCommerce website powered by Drupal. Choose poorly and the out-of-the-box feature set may not fit all of the project&#39;s needs (e.g. &quot;where&#39;s the recurring billing option?&quot;) or may not be possible at all (e.g. &quot;where can I charge my customer&#39;s card for a future purchase?&quot;). The payment gateway choice will also greatly impact the resources required (in terms of time, money, and expertise) to sufficiently secure the credit card transactions in order to achieve and maintain PCI compliance.</p> <p>As a Drupal developer trying to wow clients with amazing out-of-the-box features, it can be tempting to focus on functionality over security. However, one of my biggest concerns for those selecting Ubercart as their eCommerce solution is its lack of available payment gateways that can achieve a clients desired feature set while still being able to reduce one&#39;s&nbsp;<a href="http://soundpostmedia.com/article/lets-talk-about-pci-compliance-ubercart-and-drupal-commerce">PCI compliance woes</a>. The goal of this article is to encourage everyone to select a shared-management gateway solution (defined and described below) and to highlight that Drupal Commerce has more of these types of gateways available.</p> <h2 id="common-e-commerce-implementations"> Payment Gateway Types</h2> <p>The Payment Card Industry (PCI) groups payment gateways into three basic types: merchant-managed, shared-management, and wholly outsourced. I&#39;ll explain each of them in reverse order.</p> <h3 id="wholly-outsourced"> Wholly Outsourced</h3> <p>In this implementation, the eCommerce platform is entirely hosted, managed, and secured by a 3rd party vendor that explicitly assumes the PCI responsibilities to secure the credit card payment process. Examples include: <a href="http://www.bigcommerce.com">Bigcommerce</a>, <a href="http://volusions.com">Volusions</a>, etc. The only Drupal specific example I know of that that <em>could</em>&nbsp;fit this criteria would be <a href="http://www.drupalgardens.com/documentation/ecommerce">Drupal Gardens using Cashie or Paypal</a>.&nbsp;</p> <h3 id="shared-management"> Shared-management</h3> <p>In this implementation, the shopping cart experience begins on a Drupal site and the credit card payment is submitted directly to the payment gateway by one of three types of methods:</p> <ul> <li> <strong>Hosted Payment Page (HPP).</strong> This involves redirecting a customer to your payment processor&#39;s website where they enter their payment information directly on the payment gateway&#39;s servers. Once the transaction is successful, the customer is redirected back to the Drupal site to an order confirmation page with an authorization code so that Drupal &nbsp;knows the payment went through.</li> <li> <strong>Direct Post.</strong> This is essentially a slight of hand in which the credit card form on a Drupal site is modified such the credit card details are posted (through an HTML post over HTTPS) directly to the payment processor instead of being submitting to the Drupal Form API . Once the payment is approved, the payment gateway sends a one-time verification token back to the customer, which is then processed through Drupal Form API and sent back to the payment gateway. The token is used simply so that Drupal can verify that the payment was accepted.</li> <li> <strong>iFrame.</strong> This is essentially a combination of the above two methods. Here the credit card form is embedded on the checkout pane through an iframe. Therefore the form, being hosted on the payment processor&#39;s server, receives the credit card data directly and returns a token that can then processed through Drupal to charge and/or verify a payment with the payment gateway.</li> </ul> <h3 id="merchant-managed"> Merchant-Managed</h3> <p>In a merchant-managed implementation, the credit card information is submitted directly back to a Drupal site through the form API. Drupal then processes and transmits the card data to the payment processor and receives a response code to let it know where the payment succeeded or failed.</p> <h3 id="pci-compliance-considerations"> PCI Compliance Considerations</h3> <p>Choosing a merchant-managed solution is the most risky because you assume more of the responsibility and liability in securing the entire credit card transaction process. Choosing a wholly outsourced solution is perhaps the most restrictive because you essentially lose all the benefits of using a flexible and feature rich CMS like Drupal.</p> <p>Shared-management solutions are the balance point between these two extremes. They allow one to leverage most of the flexibility and functionality of Drupal while significantly reducing the amount of time, effort, and resources required to achieve and maintain PCI compliance.</p> <h2 id="comparing-ubercart-and-drupal-commerce-payment-gateways"> Comparing Ubercart and Drupal Commerce Payment Gateways</h2> <p>At first I wanted to create an exhaustive list of every payment gateway, but I decided to focus on a subset to simply illustrate the point. If I have neglected any gateways that would paint a different picture, please be sure to alert me in the comments section and I will correct these tables.</p> <p>Here a the breakdown of several payment gateway options for Drupal Commerce:</p> <table width="100%"> <thead> <tr> <th> Gateway</th> <th> Merchant Managed</th> <th> Direct Post</th> <th> HPP</th> <th> iframe</th> </tr> </thead> <tbody> <tr> <td> Authorize.net ARB</td> <td> X</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> &nbsp;</td> </tr> <tr> <td> Authorize.net CIM</td> <td> X</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> &nbsp;</td> </tr> <tr> <td> Authorize.net DPM/SIM</td> <td> &nbsp;</td> <td> X</td> <td> X</td> <td> &nbsp;</td> </tr> <tr> <td> Authorize.net Hosted CIM</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> NA</td> </tr> <tr> <td> Braintree</td> <td> &nbsp;</td> <td> X</td> <td> &nbsp;</td> <td> &nbsp;</td> </tr> <tr> <td> Hosted PCI</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> X</td> </tr> <tr> <td> Paypal WPS</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> X</td> <td> &nbsp;</td> </tr> <tr> <td> Paypal PPA</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> X</td> <td> X</td> </tr> <tr> <td> Stripe</td> <td> &nbsp;</td> <td> X</td> <td> &nbsp;</td> <td> &nbsp;</td> </tr> </tbody> </table> <p>And here is a similar breakdown for Ubercart.</p> <table width="100%"> <thead> <tr> <th> Gateway</th> <th> Merchant Managed</th> <th> Direct Post</th> <th> HPP</th> <th> iframe</th> </tr> </thead> <tbody> <tr> <td> Authorize.net ARB</td> <td> X</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> &nbsp;</td> </tr> <tr> <td> Authorize.net CIM</td> <td> X</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> &nbsp;</td> </tr> <tr> <td> Authorize.net DPM/SIM</td> <td> &nbsp;</td> <td> X</td> <td> X</td> <td> &nbsp;</td> </tr> <tr> <td> Authorize.net Hosted CIM</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> NA</td> </tr> <tr> <td> Braintree</td> <td> &nbsp;</td> <td> NA</td> <td> &nbsp;</td> <td> &nbsp;</td> </tr> <tr> <td> Hosted PCI</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> NA</td> </tr> <tr> <td> Paypal WPS</td> <td> &nbsp;</td> <td> &nbsp;</td> <td> X</td> <td> &nbsp;</td> </tr> <tr> <td> Stripe</td> <td> &nbsp;</td> <td> NA</td> <td> &nbsp;</td> <td> &nbsp;</td> </tr> </tbody> </table> <p>Sadly almost every (available) shared-management implementation for Ubercart involves a redirect to a hosted page, which clients in the United States are usually resistant towards because they dislike not being able to keep the client on site during the entire checkout process (sidenote: citizens of the EU tend to be much more accepting of hosted payment pages, so this stigma against HPP&#39;s is not necessarily going to persist). Thankfully there is at least one known direct post method (Authorize.net DPM) for Ubercart, but this option cannot be used in conjunction with card on file or recurring billing capabilities. As for including iframe implementations, such as Authorize.net Hosted CIM, <a href="http://drupal.org/node/1407108#comment-7138938">it&#39;s already been ruled out as unlikely to happen</a>&nbsp;for Ubercart.</p> <p>By comparison, Drupal Commerce has several different options with respect to companies offering shared-management implementation (Stripe, Braintree, Hosted PCI) and actually offers an iframe option (Hosted PCI). The Drupal Commerce community is also very active and growing while Ubercart&#39;s community will likely hit end-of-life in the next year.</p> <p><em>Author&#39;s Note: I know there are <a href="http://www.opendrops.com/blog/list-payment-gateways-supported-ubercartdrupal">many many more Ubercart payment gateway modules</a> out there, but many of them are deprecated, have fewer than 50 users, and/or are unmaintained.</em></p> <h2 id="summary"> Summary</h2> <ul> <li> Selecting the right payment gateway is not a decision that should be made lightly.</li> <li> Shared-management gateways tend to offer the best balance of features and ease of achieving/maintaining PCI compliance.</li> <li> Drupal Commerce offers more shared-managment solutions, both in terms of the quantity of companies to select from as well as the diversity in the types of implementations.</li> </ul> <p>To learn more, please read my previous article (<a href="http://soundpostmedia.com/article/lets-talk-about-pci-compliance-ubercart-and-drupal-commerce">Let&#39;s Talk About PCI Compliance for Ubercart and Drupal Commerce</a>) and stay tuned for the <a href="http://drupalpcicompliance.org">PCI compliance white paper</a>&nbsp;that should be ready in a few short weeks!</p> http://soundpostmedia.com/article/comparing-pci-compliance-considerations-among-ubercart-and-drupal-commerce-payment-gateways</link> http://soundpostmedia.com/article/comparing-pci-compliance-considerations-among-ubercart-and-drupal-commerce-payment-gateways 2013-06-14T00:00:00+00:00 Drupal PCI Compliance White Paper: Update 5/5/2013 <p><em>For context, <a href="#reference">click here</a> to jump down to the reference links.</em></p> <h3 id="where-we-are"> Where We Are</h3> <p>I&#39;m pleased to announce the following:</p> <ul> <li> My co-authors and I have completed a rough draft of this white paper and we&#39;re actively refining it to get to a completed first draft.</li> <li> <a href="http://www.appliedtrust.com/ned">Ned McClain</a>&nbsp;of Applied Trust has joined the project as a co-author. Ned&#39;s expertise and years of experience in this field has been an extremely valuable asset and this project will continue to benefit as a direct result of his input.</li> <li> A heartfelt thanks to <a href="http://crossfunctional.net/">Ryan Cross of CrossFunctional</a>&nbsp;for becoming our&nbsp;latest project sponsor.</li> <li> The article that sparked this project (<a href="http://soundpostmedia.com/article/lets-talk-about-pci-compliance-ubercart-and-drupal-commerce">Let&#39;s Talk About PCI Compliance for Ubercart and Drupal Commerce</a>) has crossed 2500 page views. This reinforces (at least to me) that there is a demand for more information on this subject matter.</li> </ul> <h3 id="why-pci-compliance-for-drupal-is-more-important-than-ever"> Why PCI Compliance for Drupal Is More Important Than Ever</h3> <ul> <li> The number of reported <a href="http://drupal.org/project/usage/ubercart">Ubercart</a>/<a href="http://drupal.org/project/usage/commerce">Drupal Commerce</a> installations continues to grow rapidly.</li> <li> Many &quot;silver bullet&quot; strategies are not as bulletproof as you&#39;d like to believe.</li> <li> A new version of the PCI standard will be released within a year and the requirements are only going to get more stringent.</li> <li> As companies become more distributed and adopt cloud-based solutions, it&#39;s important to define who is responsible (and liable) in the context of securing payments.</li> <li> Fully understanding this topic can give you and/or your business a competitive advantage in the Drupal ecommerce marketplace.</li> </ul> <p>And perhaps the most important item&mdash;if you currently own, operate, or host an ecommerce website that is <em>NOT</em> compliant, you could be putting your business at risk.</p> <h3 id="next-steps"> Next Steps</h3> <p>This is a complex topic that requires a lot of time to check assumptions, distill a large volume of material down to the most important elements, and write it in a way that is understandable across several audiences within the community. Having nearly achieved a fully complete first draft, we are at the stage where we will need to iterate and refine it to ensure its one cohesive document and it has all the necessary components (most notably references, citations, and footnotes). We will then reach out to additional reviewers to get feedback from a wider audience. If all goes as planned, this feedback will only require us to make minor adjustments and we will have a clear path forward to a final release.</p> <h3 id="sponsorship"> Sponsorship</h3> <p>There are still several gold and silver sponsorships available if you are willing and able to fund the remaining portions of this project. While a lot of progress has been made, I recall several personal (and painful) experiences submitting manuscripts to scientific journals only to find out that the quantity of revisions requested required rewriting a paper from scratch. Yes this can be disheartening, but it almost always resulted in a much better end product. Therefore, if you would like to become a sponsor, please reach out to me using the contact information at <a href="http://drupalpcicompliance.org/">the official website for the white paper</a>.</p> <p>Thank you for your time and I look forward to contributing this work back to the community!</p> <h3 id="reference"> <a name="reference"></a>Reference</h3> <p>The following articles, posts, and websites describe the motivating factors for starting this project:</p> <ul> <li> <a href="http://soundpostmedia.com/article/lets-talk-about-pci-compliance-ubercart-and-drupal-commerce">Let&#39;s Talk About PCI Compliance for Ubercart and Drupal Commerce</a></li> <li> <a href="http://soundpostmedia.com/article/proposal-drupal-pci-compliance-white-paper">Proposal: Drupal PCI Compliance White Paper</a></li> <li> <a href="http://drupalpcicompliance.org/">Drupal PCI Compliance White Paper (Official Website)</a></li> </ul> http://soundpostmedia.com/article/drupal-pci-compliance-white-paper-update-552013</link> http://soundpostmedia.com/article/drupal-pci-compliance-white-paper-update-552013 2013-05-07T01:00:00+00:00 Proposal: Drupal PCI Compliance White Paper <p><em><strong><span style="color:#ff0000;">UPDATE:</span> A white paper on Drupal PCI compliance is actively being worked on. Please visit <a href="http://drupalpcicompliance.org/">the official website</a> for more details.</strong></em></p> <p>In refererence to the loss of undocumented wisdom, Andrew Carnegie once stated that &ldquo;it was one of the sins of the ages that this knowledge, gained at such a tremendous price, by so many men, was buried with their bones when they died. Nobody had ever organized it into a philosophy and made it available to the man of the street.&rdquo;</p> <p>I feel the exact same way when I think about the number Drupal developers that have suffered through the long, hard journey of achieving and maintaining PCI compliance for ecommerce websites. With over 67,000+ active Ubercart and Drupal Commerce websites (as reported by Drupal.org), one might assume there would be an abundance of quality resources out there (articles, blog posts, youtube videos, etc) to help others speed through this torturous learning curve.</p> <p>Unfortunately, I didn&#39;t believe such a resource existed that was specifically tailored to the Drupal community. This inspired me to write&nbsp;<a href="http://soundpostmedia.com/article/lets-talk-about-pci-compliance-ubercart-and-drupal-commerce">a somehwat lengthy article</a>&nbsp;to start that conversation. It touched on a lot of the major pain points, provided the pros and cons of each solution, and it also contained an aggregated list of resources that I had found over the last several years. The feedback was incredible. It had clearly struck a chord with a lot of developers and sparked a conversation.</p> <h2> The Next Step</h2> <p>In that article I had pitched the idea of taking it a step further and creating a white paper that was similar in form the <a href="http://drupalsecurityreport.org/">Drupal Security Report</a>. My intention was to go beyond a simple article and create something more definitive. I want to create a quality document that any developer or evaluator could read in a single sitting and get a solid high level overview of the issues at hand. And if it helps the next 67,000+ Drupal e-commerce sites achieve and maintain their PCI compliance, I&rsquo;ll consider this a huge success!</p> <h2 id="the_proposal"> The Proposal</h2> <p>Without further ado, you can access the proposal document <a href="http://drupalpcicompliance.org">here</a>, which is the domain that will ultimately host this document as well as any future versions. My goal is to have this completed sometime before DrupalCon Portland, where I&rsquo;m also submitting a session to give a talk on this same subject matter.</p> <h2 id="the_ask"> The Ask</h2> <p>A technical document of this type can take a lot of time to create and a lot of extra help to review it to ensure that all the technical information is sourced and as accurate as possible. Therefore you&rsquo;ll see that I&rsquo;m seeking volunteers (to help with the feedback/review process) and a modest level of sponsorship (to help move this project alone).</p> <p>And as always, feel free to leave a (helpful) comment/suggestion below!</p> http://soundpostmedia.com/article/proposal-drupal-pci-compliance-white-paper</link> http://soundpostmedia.com/article/proposal-drupal-pci-compliance-white-paper 2013-01-28T20:25:00+00:00 Let's Talk About PCI Compliance for Ubercart and Drupal Commerce. <p><em><strong><span style="color:#ff0000;">UPDATE:</span> A white paper on Drupal PCI compliance is actively being worked on. Please visit <a href="http://drupalpcicompliance.org/">the official website</a> for more details.</strong></em></p> <p>Drupal makes it incredibly easy to turn even the simplest website into a full fledged commerce solution. All you have to do is download a few modules, check a few boxes, and you&rsquo;re up and running in no time! Now you can sell your products around the clock to anyone in the world with a credit card. And because there is a strong focus on security within the Drupal community, it&rsquo;s easy to convince ourselves that nothing can go wrong while we move onto building out the next feature or launching the next website.</p> <h2 id="when_things_go_wrong"> When Things Go Wrong</h2> <p>The bank, the credit card company, the website owners, the customers: everyone&rsquo;s happy as long as the transactions are running smoothly and securely. But what happens when a customer&rsquo;s data is exposed and/or stolen? Who is responsible?</p> <p>If I&rsquo;m a brick and mortar store owner and I write down a full credit card number onto paper, then I&rsquo;m liable if that card data is stolen and/or used in an unauthorized format. I&rsquo;m also liable if I do something insecure electronically, such as email a full credit card number without encryption. Hopefully this is obvious, but I&rsquo;ll underscore it anyway. If a customer&rsquo;s credit card information can be exposed and/or stolen while it&rsquo;s within our possession/jurisdiction or as a result of our actions, then we are (at least partially) responsible and liable.</p> <p>Liability can be a hefty price to pay if a security breach occurs. Fines can go well into the 6-7 figure range and the ensuing PR nightmare can make it difficult to convince customers to trust you again. And if you want to accept credit cards at your store again, you&rsquo;ll no longer be able to submit your own security assessment questionnaire. Instead, you&rsquo;ll have to be audited by a 3rd party at a tremendous cost of time and resources.</p> <p>The effects don&rsquo;t stop at the individual company experiencing a breach. Drupal&rsquo;s reputation for being a secure CMS/CMF can be severely undermined, even if it wasn&rsquo;t the component that ultimately failed.</p> <h2 id="my_intention"> My Intention</h2> <p>Emailing credit cards should be an obvious no-no, and yet I still occasionally receive them in my inbox from web savvy individuals that I assume should know better. And I don&rsquo;t believe that they were being careless or intentionally malicious. Sometimes they just didn&rsquo;t know any better and believe things are far more secure and protected than they actually are.</p> <p>I was in the very same boat with respect to PCI compliance when I began my Drupal career several years ago. &ldquo;It just works&rdquo; was good enough for me. And my colleagues, some of them with 5+ years of prior experience, didn&rsquo;t seem to bat an eye when we fired up some commerce stores and began processing transactions. This was incredibly naive and stupid of me. But like an otherwise intelligent person emailing credit card numbers, I simply didn&rsquo;t know any better at the time. And I didn&rsquo;t get any major red flags when I performed several google searches and searched through the Ubercart threads. So I just assumed everything was ok&hellip;</p> <p><em>Full disclosure: I have no certifications/credentials with respect to PCI compliance security. However, I probably have 200+ hours of self-study under my belt because there was no definitive guide for Drupal Ubercart and/or Drupal Commerce PCI compliance. Therefore I do feel qualified to have some opinions on the matter based on what I&rsquo;ve learned, discovered, and implemented along the way.</em></p> <p>The reason I&rsquo;m writing this article is because it seems that everywhere I turn, Drupal developers and Drupal shops are still doing the equivalent of emailing credit card data with their PCI compliance requirements. This is dangerous and has got to change. And I believe the biggest reason this is occurring is due to lack of quality information (as well as the abundance of misinformation) within the community.</p> <p>So it is time to have &ldquo;the talk&rdquo; with respect to PCI compliance and Drupal e-commerce. Let&rsquo;s get a few major myths out of the way.</p> <h2 id="myths_about_pci_compliance_within_drupal"> Myths About PCI Compliance within Drupal</h2> <p><em>Disclaimer: I&rsquo;m not a lawyer and this is not legal advice. Everyone&rsquo;s card data environment is specific to their configurations and business needs. The information below is my opinion and is accurate to the best of my knowledge. If anything is incorrect, I will do my best to fix it. Please do your own due diligence!</em></p> <h3 id="myth_1_i8217m_not_storing_cards_on_my_site_and_therefore_i8217m_pci_compliant"> Myth 1: I&rsquo;m not storing cards on my site, and therefore I&rsquo;m PCI compliant.</h3> <p>FALSE. While not storing the card data does (significantly) reduce your PCI responsibilities considerably, it does not eliminate them completely. If the credit card data is still submitted to your site and passing through the Drupal form API, then your site + server is still processing and transmitting that data. If someone were to alter a line of code and/or intercept that data with a properly configured hook<em>form</em>alter, the card data could still be collected and distributed.</p> <h3 id="myth_2_i8217m_using_authorizenet_and_therefore_i8217m_pci_compliant"> Myth 2: I&rsquo;m using Authorize.net, and therefore I&rsquo;m PCI compliant.</h3> <p>FALSE. Authorize.net (or whatever payment gateway you select) is one piece of the puzzle. And while Authorize.net can handle its portion of the process securely, your system is only as strong as its weakest link. Is your site running on a shared hosting environment? Are your Drupal security patches up to date? Do you have your SSL certificate properly installed? Did you turn on HTTPS?</p> <p>If you&rsquo;re accepting cards on your site, you&rsquo;re probably PCI SAQ C. Reviewing all the requirements <a href="https://www.pcisecuritystandards.org/documents/pci_saq_c_v2.pdf">for this level</a> (approximately 40) will give you a better understanding of your responsibilities.</p> <h3 id="myth_3_i_use_drupal_commerce_and_therefore_i8217m_pci_compliant"> Myth 3: I use Drupal Commerce, and therefore I&rsquo;m PCI Compliant.</h3> <p>FALSE. Just because Drupal Commerce is newer than Ubercart does not mean that it&rsquo;s compliant out of the box. A single configuration change can open up a security hole. Example: an admin logs in and disabled HTTPS browsing. Now a user&rsquo;s session data and or form submission data can be sent in the clear and potentially stolen.</p> <h3 id="myth_4_pci_compliance_is_an_extortion_racket_and_i_don8217t_have_to_comply"> Myth 4: PCI Compliance is an extortion racket and I don&rsquo;t have to comply.</h3> <p>TRUE and FALSE. There is also nothing compelling you to pay your taxes, until a government agent is knocking at your door. While I also think the process is more security theater than security, the fact of the matter is that you have to comply with their requirements for the privilege (not the right) to accept credit card payments on your site. And while this may seem difficult and annoying, there are other solutions available to you if if you or your client simply cannot put forth the time and energy to get your site fully compliant.</p> <h3 id="myth8217s_5_6_7_etc"> Myths 5, 6, 7, etc</h3> <p>I could go on, but I think you&rsquo;re getting the point. PCI compliance is not so simple and blanket statements about Ubercart and/or Commerce being compliant out of the box are simply not true!</p> <h2 id="solutions"> Solutions</h2> <p>It&rsquo;s easy to be negative and point out what&rsquo;s wrong, but what about solutions? If PCI compliance is so difficult and expensive, what can we do about it? I will do my best to give a concise overview and specific examples.</p> <p>The PCI compliance standard targets 5 major security goals, which break down to 12 areas of focus (see <a href="https://www.pcisecuritystandards.org/documents/PCI%20SSC%20-%20Overview.pdf">here</a>). In total, there are 288 possible items to be responsible for in order to prove your compliance. Thankfully, you can configure your system to offload or outsource a portion of those responsibilities to other people or services. The PCI compliance industry broadly groups 5 levels of responsibility: A, B, C, C-VT, and D. Typically, a website would fall into A, C, or D so I&rsquo;ll ignore B and C-VT for now.</p> <p>If you&rsquo;re storing credit cards on servers that you personally manage or edit the code, then unfortunately you&rsquo;re SAQ D and you have to comply with all 288 responsibilities. This can take most companies several months and hundreds of man hours to comply with and document. However, if you only process and transmit cards, you&rsquo;re likely SAQ C. This sheds off almost 85% of the line items and now you&rsquo;re down to 40 items to comply with. However it&rsquo;s still a very difficult process. It also limits what types of services you can use. Example: don&rsquo;t bother trying to use Rackspace cloud because you they don&rsquo;t have a PCI Level 1 certification for their cloud server offering. You&rsquo;re limited to managed only, and it still will require time and attention to get it up to spec.</p> <p>The holy grail for Drupal eCommerce are PCI SAQ A solutions. At this level, you and your company are now responsible for only 12 out of the original 288 PCI responsibilities/requirements. And fortunately most of these items are easily achievable by just about anyone and within a few hours or days.</p> <p>The easiest way to achieve PCI SAQ A is to configure an Ubercart or Drupal Commerce store to redirect to an external payment site (e.g. Authorize.net, Paypal, etc) so that they handle ALL the payment data before redirecting the user back to your site after a successful transaction. This type of redirection is called &lsquo;outsourcing&rsquo; and is the only way (IMHO) to fully get to PCI SAQ A on Drupal.</p> <p>The unfortunate reality is we all dislike this type of solution. Sending users to another site can be confusing and we lose control over what the payment site looks and feels like. It also limits our options of features and functionality. For example, using Authorize.net SIM doesn&rsquo;t allow us to leverage their CIM services, such as card on file, which is usually needed for any site doing recurring billing.</p> <p>This type of use case puts us into a bit of a dilemma. We either tell the client that we have to alter their business model OR we push forward with the feature set as requested and take on the PCI SAQ C responsibilities.</p> <h3 id="tokenized_payment_gateways"> Tokenized Payment Gateways</h3> <p>To combat this, we&rsquo;re seeing an emergence of a hybrid solution which can give us the best of both worlds: total feature flexibility with payments on site while still achieving PCI SAQ A. They are often described as &ldquo;tokenized&rdquo; payment gateway solutions. To understand why they are different, let&rsquo;s first look at how a traditional payment gateway works.</p> <p>In a traditional payment gateway with payment on site, the credit card first has to go through a series of validations within the CMS and then pass onto to the payment gateway servers from our website directly. While it&rsquo;s doing this, shopping carts like Ubercart and Drupal Commerce do encrypt and protect this data as best as they can, but it&rsquo;s still vulnerable to any deficiencies in our setup because it&rsquo;s passing through our setup.</p> <p>In tokenized solutions, the credit card data never touches our servers through the clever use of a javascript API. Now when the browser page is loaded on a clients computer, there is subtle but important difference. When the user clicks the submit button, the data is first sent directly to the payment gateway to validate the card first. If it validates, a one time token is returned to the user&rsquo;s browser. Then and only then does the customers information and token get submitted to the Drupal site. Now the only thing passing through your Drupal site and servers is a token that represents the users card. When that token then arrives at the payment gateway again, the transactions is a success and the checkout process continues.&nbsp;</p> <p>And if that explanation didn&#39;t fully make sense, check out <a href="https://www.braintreepayments.com/tour/pci-compliance">this excellent step by step breakdown and infographic</a> by Braintree Payments.</p> <p>In short, the user never left the site and yet the payment never touches your servers. I can&rsquo;t emphasize how awesome this is! Not only does this drastically reduce the amount of time and effort it takes to achieve PCI compliance, but it still allows you to leverage the full power and feature set of Drupal by keeping the customer on site.</p> <p>What the Drupal e-commerce community needs is more of these PCI SAQ A solutions. Unfortunately, only a few exist for Ubercart and Commerce, which means we are still slogging through the SAQ C and D responsibilities&hellip; or ignoring them altogether. And with 45,000 active <a href="http://drupal.org/project/ubercart">Ubercart installations</a> and 17,000 active <a href="http://drupal.org/project/commerce">Drupal Commerce installations</a>, we can not afford to keep ignoring these concerns forever.</p> <h2 id="responsibility_and_opportunities"> Responsibility and Opportunities</h2> <p>Clients come to us because we are perceived as having expertise in an area of knowledge that they do not. And as consultants, I believe it is our job to not only help them achieve their vision but to alert them of decisions and directions that would be the equivalent of stepping on a landmine.</p> <p>My hope is that we no longer find it acceptable, as a community, to create a hand over a commerce website without even mentioning the ramifications of PCI compliance. At the very minimum, we should at least point them in the right direction so they can ultimately navigate through this by themselves.</p> <p>My hope is that when a potential client comes to us with a sub-$10,000 budget wanting a SAQ D commerce solution, we do one of 3 things: decline, educate, or upsell. We either walk away because it&rsquo;s not right to hand over a ticking time bomb. Or we educate them into adopting a solution that fits their budget. Or we upsell them on additional contracts and services to perform a security audit and ongoing maintenance in order to achieve and maintain their compliance.</p> <p>But in no way to do we simply walk them up to a minefield, wish them good luck, and run onto the next client. If we keep doing that, someone&rsquo;s (eventually) going to get hurt.</p> <h2 id="a_proposal"> A Proposal</h2> <p>Although this is a lot of material, we&rsquo;ve really just scratched the surface. I typically like to be much more comprehensive with examples and citations, but we have to start the conversation somewhere. I hope that, at the very least, I&rsquo;ve made my case that becoming PCI compliant is not as easy as turning on a switch or just making sure you&rsquo;re modules are up to date. I also hope that this puts more pressure on the community to seek and develop PCI SAQ A payment gateways so that becoming compliant becomes affordable and achievable for every business wanting to have an eCommerce solution on their Drupal site.</p> <p>But we&rsquo;re not there yet&hellip;</p> <p>In the meantime, I believe we need a more definitive PCI compliance resource tailored specifically to the needs of the Drupal community. Maybe this would simply be a series of articles (such as this) where we take on one aspect a time: starting with the needs and requirements and walking through a series of case studies and solutions.</p> <p>Or perhaps the best approach would be a whitepaper like the one found at <a href="http://drupalsecurityreport.org">Drupal Security Report</a>. In this scenario, we could have an all inclusive document that could be sent to prospective clients before a conversation about a commerce installation. Providing such material ahead of time could be extremely valuable, save a lot of time, and set proper expectations about what is possible given their vision and budget.</p> <p>I&rsquo;d be very excited to play a part in creating such a whitepaper and I also believe I would be a good candidate to take on such a task. During my PhD tenure at MIT, I successfully published 6 articles (yay for carbon nanotubes!) in peer-reviewed journals and in conference compilations as well as successfully defended my thesis. But I also know that I would not want to take this on alone, and would welcome additional authors, particularly those with extensive knowledge and experience in this field.</p> <h2 id="continuing_the_conversation"> Continuing The Conversation</h2> <p>And if these articles and/or a whitepaper never comes to fruition, at the very least I want to spark this conversation&hellip;</p> <p>Thoughts? Questions? Comments? Rebuttals? I&rsquo;d love to hear from you!</p> <h2 id="resources"> Resources</h2> <p>Here are is a list of resources I&rsquo;ve collected during my research and study. Some of them might be a little out of date or no longer relevant, but I did my best to update the labels so that someone other than myself would understand what they mean.</p> <ul> <li> General Overview <ul> <li> <a href="https://www.pcisecuritystandards.org/">Official PCI Compliance Website</a></li> <li> <a href="http://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard">PCI - Wikipedia</a></li> <li> <a href="http://blog.elementps.com/element_payment_solutions/2009/02/pci-saq-made-easy.html">PCI SAQ Made Easy</a></li> <li> <a href="http://denver2012.drupal.org/program/sessions/pci-four-letter-word-e-commerce">PCI: A Four-Letter Word of E-Commerce</a></li> <li> <a href="http://www.prometsource.com/blog/pci-compliance-drupal">PCI Compliance with Drupal</a></li> </ul> </li> <li> User Experiences <ul> <li> <a href="http://groups.drupal.org/node/22614">Adventures in PCI compliance</a></li> </ul> </li> <li> Ubercart Specific (Possibly Outdated) <ul> <li> <a href="http://www.ubercart.org/forum/bug_reports/4962/pci_dss_session_handling_encryption">PCI DSS session handling &amp; encryption</a></li> <li> <a href="http://www.ubercart.org/forum/support/16862/whats_status_pci_compliance_ubercart">What&rsquo;s the status of PCI compliance for Ubercart?</a></li> <li> <a href="http://drupal.org/project/uc_authorizenet_simdpm">Ubercart SIM/DPM</a></li> </ul> </li> <li> Authorize.net Specific <ul> <li> <a href="http://www.authorize.net/resources/pcicompliance/">Understanding PCI Compliance</a></li> <li> <a href="http://www.authorize.net/resources/howitworksdiagram/">How it Works</a></li> <li> <a href="http://www.authorize.net/solutions/merchantsolutions/merchantservices/sslcertificates/">Authorize.net SSL Certs for Sale</a></li> <li> Comparing Methods Within Authorize.net <ul> <li> <a href="http://www.authorize.net/solutions/merchantsolutions/merchantservices/cim/">CIM - Customer Information Manager</a></li> <li> <a href="http://community.developer.authorize.net/t5/Integration-and-Testing/Which-method-to-use-AIM-SIM-CIM-DPM/m-p/16638#M9371">Which Method to Use: AIM, SIM, CIM, DPM</a></li> <li> <a href="http://developer.authorize.net/api/compare/">Compare E-Commerce APIs</a></li> </ul> </li> <li> Method Tutorials <ul> <li> <a href="http://developer.authorize.net/api/dpm">DPM - Direct Post Method</a></li> <li> <a href="http://developer.authorize.net/api/cim">CIM - Customer Information Manager</a></li> <li> <a href="http://developer.authorize.net/api/sim/">SIM - Server Integration Method</a></li> </ul> </li> </ul> </li> <li> Drupal Security Resources <ul> <li> <a href="http://drupal.org/security">Security Advisories</a></li> <li> <a href="http://drupal.org/security-team">Drupal Security Team</a></li> <li> <a href="http://drupal.org/documentation/is-drupal-secure">Is Drupal Secure?</a></li> <li> <a href="http://crackingdrupal.com/">Cracking Drupal: Book</a></li> <li> <a href="http://drupal.org/project/securepages">Drupal Secure Pages</a></li> <li> <a href="http://drupal.org/writing-secure-code">Writing Secure Code</a></li> <li> <a href="http://drupal.org/project/simpletest">Simpletest</a></li> <li> <a href="http://drupal.org/coding-standards">Coding Standards</a></li> <li> <a href="http://drupal.org/project/coder">Coder</a></li> <li> <a href="http://drupalsecurityreport.org/">Drupal Security Report</a></li> <li> <a href="http://drupalsecurityreport.org/sites/drupalsecurityreport.org/files/drupal-security-white-paper-1-1.pdf">Drupal Security Report - PDF</a></li> <li> Scanning Solutions <ul> <li> <a href="http://drupalscout.com/">Drupal Scout</a></li> <li> <a href="http://drupal.org/project/hacked">Hacked</a></li> </ul> </li> </ul> </li> <li> Amazon EC2 Hosting <ul> <li> <a href="http://aws.amazon.com/security/">Amazon Security</a></li> <li> <a href="http://aws.amazon.com/security/pci-dss-level-1-compliance-faqs/">PCI DSS Level 1 Compliance</a></li> <li> <a href="http://aws.amazon.com/">AWS</a></li> <li> <a href="http://aws.amazon.com/ebs/">AWS EBS</a></li> <li> <a href="http://aws.amazon.com/s3/">AWS S3</a></li> </ul> </li> <li> Acquia Hosting <ul> <li> <a href="http://aws.amazon.com/solutions/case-studies/acquia/">AWS Case Study: Acquia</a></li> <li> <a href="http://www.acquia.com/products-services/acquia-managed-cloud">Acquia Managed Cloud</a></li> <li> <a href="https://www.acquia.com/collateral/acquia-cloud-security-and-compliance">Acquia Cloud &mdash; Security and Compliance</a></li> <li> <a href="http://www.acquia.com/sites/default/files/collateral/wp-cloud-security-arch-0269.pdf">Acquia Cloud &mdash; Security and Compliance - PDF</a></li> <li> <a href="https://docs.acquia.com/cloud/architecture">Acquia Cloud &mdash; Architecture</a></li> </ul> </li> <li> Rackspace Hosting <ul> <li> <a href="http://www.rackspace.com/managed_hosting/services/security/pci/">Rackspace - PCI Overview</a></li> <li> <a href="http://cloudsecurity.org/blog/2009/03/14/what-does-pci-compliance-in-the-cloud-really-mean.html">What Does PCI Compliance in the Cloud Really Mean?</a></li> </ul> </li> <li> Detailed Standards and Documentation <ul> <li> <a href="https://www.pcisecuritystandards.org/">PCI Standards Homepage</a></li> <li> <a href="https://www.pcisecuritystandards.org/security_standards/documents.php">PCI Standards - All Documents</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/PCI%20SSC%20-%20Overview.pdf">PCI SSC - Overview</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/PCI%20SSC%20-%20Ten%20Common%20Myths.pdf">Ten Common Myths of PCI SSC</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/pa-dss_v2.pdf">The standard</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/navigating_dss_v20.pdf">Navigation PCI DSS</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/pci_glossary_v20.pdf">Glossary of Terms, Abbreviations, and acronyms</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/PCISSC_QRG_Order_Form.pdf">PCI DSS Quick Reference Guide</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/Prioritized_Approach_V2.0.pdf">The Prioritized Approach to Pursue PCI DSS Compliance</a></li> <li> <a href="https://www.pcisecuritystandards.org/security_standards/documents.php?document=pci_dss_v2-0#pci_dss_v2-0">Documents Library</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/pci_dss_saq_instr_guide_v2.0.pdf">SAQ Instructions and Guidelines</a></li> <li> <a href="https://www.pcisecuritystandards.org/documents/pci_saq_c_v2.pdf">SAQ C V2.0</a></li> </ul> </li> <li> Tokenized Solutions <ul> <li> <a href="https://stripe.com/">Stripe</a></li> <li> <a href="https://www.braintreepayments.com/">Braintree Payments</a></li> <li> <a href="http://www.authorize.net/solutions/merchantsolutions/merchantservices/cim/">Authorize.net HOSTED CIM</a>. NOTE this is different from their standard CIM solution.</li> </ul> </li> <li> Drupal Modules That Can Achieve SAQ A (With Correct Configurations) <ul> <li> <a href="http://drupal.org/project/uc_authorizenet_simdpm">Ubercart Athorize.net SIM/DPM</a></li> <li> <a href="http://drupal.org/project/commerce_authnet_simdpm">Commerce Authorize.net SIM/DPM</a></li> <li> <a href="http://drupal.org/project/commerce_stripe">Commerce Stripe</a></li> </ul> </li> </ul> http://soundpostmedia.com/article/lets-talk-about-pci-compliance-ubercart-and-drupal-commerce</link> http://soundpostmedia.com/article/lets-talk-about-pci-compliance-ubercart-and-drupal-commerce 2012-10-11T22:13:00+00:00 Drush Tip: Quickly Sync Files Between Your Environments With Rsync <p>If you&rsquo;re using Drupal best practices, you probably maintain different copies of your website (e.g. some combination of production, staging, development, and local development environments). But what happens when your local copy needs to be synchronized with the files you uploaded to your production server? If you need to do this a lot, automating the process can save you a lot of time and reduce the possibility of human error.</p> <p>Here&#39;s a quick way to automate this file syncronization process using the rsync option within drush. Besides a basic drush installation/configuration, there are only two main items you&#39;ll need to place in a &nbsp;drush site alias file in order to set this up:</p> <ol style=""> <li> A path alias for each environment.</li> <li> A shell alias for each combination of environments you wish to sync files (i.e. source1 to destination1, etc).</li> </ol> <h3> Adding a Path Alias for Each Environment</h3> <p>The path alias variable is a way to reference which folder you want to sync to and from on each environment. In this example, we are using the standard sites/default/files location and referencing it by %files variable.</p> <pre> // Site mysite.com, environment prod $aliases[&#39;mysite.production&#39;] = array( &#39;parent&#39; &#39;root&#39; =&gt; &#39;/my/file/path/drupal&#39;, &#39;uri&#39; =&gt; &#39;mysite.com&#39;, &#39;remote-host&#39; =&gt; &#39;myhosting.com&#39;, &#39;remote-user&#39; =&gt; &#39;myusername&#39;, &#39;path-aliases&#39; =&gt; array( &#39;%files&#39; =&gt; &#39;sites/default/files&#39;, ) ); // Site mysite.com, environment local $aliases[&#39;mysite.local&#39;] = array( &#39;root&#39; =&gt; &#39;/my/local/file/path/drupal&#39;, &#39;uri&#39; =&gt; &#39;mylocalsite&#39;, &#39;path-aliases&#39; =&gt; array( &#39;%files&#39; =&gt; &#39;sites/default/files&#39;, ) ); </pre> <p>If you have any questions on what the over variables mean, simply checkout the examples/example.aliases.drushrc.php file contained in the drush module. Also be sure to add in entries for your additional environments if you want the option to sync to/from them.</p> <h3> Adding a Rsync Shell Alias</h3> <p>Once you have the path aliases set, the last part is simple one line addition at the end of the site alias file.</p> <pre> $options[&#39;shell-aliases&#39;][&#39;pull-files&#39;] = &#39;!drush rsync @mysite.production:%files/ @mysite.local:%files&#39;;</pre> <p>Here I&#39;ve created a simple drush shell alias called &quot;pull-files.&quot; All I need to do is run drush @mysite pull-files and drush will pull down my files from production to my local environment using the settings in my site alias file. And if you&#39;d prefer to sync from the development or staging environments, simply create seperate aliases for each possible combination you&#39;d like (e.g. pull-files-staging, pull-files-dev, etc).</p> <h3> Additional Tips</h3> <p>Ideally you&#39;ve properly configured/installed your ssh keys such that you don&#39;t have to authenticate with the external servers every time you run this command. And if you&#39;d like to keep files in sync without having to think about it, you could also add this to your local crontab. Using this in combination with drush&#39;s sql-sync could be useful if you want to start each day or each new feature from a clean slate!</p> http://soundpostmedia.com/article/drush-tip-quickly-sync-files-between-your-environments-rsync</link> http://soundpostmedia.com/article/drush-tip-quickly-sync-files-between-your-environments-rsync 2012-09-09T15:43:00+00:00 You Might be a Bad Drupal Developer If... <ul> <li> You use Dropbox as your version control system.</li> <li> You download and install 1000+ Drupal modules &ldquo;just in case&rdquo; you need them.</li> <li> You give anonymous users permission to Views UI &quot;so they can customize their experience.&quot;</li> <li> You provide the PHP filter option for the comment field in order to find Drupal talent by seeing who can hack your site first.</li> <li> You give anonymous users the &ldquo;Administer permissions&rdquo; privilege so they don&#39;t have to bug you in order to turn on a feature for themselves.</li> <li> You claim &quot;Ubercart is clearly PCI compliant&rdquo; because of a forum thread starting and ending in 2008.</li> <li> Your favorite IDE is MS word.</li> <li> You place all of your site content into blocks instead of nodes (or other entities).</li> <li> Your idea of upgrading a module from D6 to D7 is changing the version number in the .info file.</li> <li> You routinely set the sites/default/files permissions to 777. After all, how else would you upload a file?</li> <li> You pronounce &ldquo;<a href="http://buytaert.net/">Dries</a>&rdquo; like you would the plural of the word dry.</li> <li> You don&rsquo;t realize <a href="http://twitter.com/drupaltruth">@drupaltruth</a> is being hilariously sarcastic.</li> <li> You tried migrating from Wordpress to Drupal by replacing wp-config.php with settings.php.</li> <li> You use <a href="http://drupal.org/node/1363032">snowpeoples</a> as your favorite delimiter.</li> <li> You went to <a href="http://www.joomlacampcolorado.com/">JoomlaCamp Colorado</a> and ended up here by mistake.</li> <li> Your favorite way to &lsquo;integrate&rsquo; 3rd party code is to use php includes from external urls.</li> <li> You spend hours each week trying to get developers to ditch IRC and join your AIM channel.</li> </ul> <p>Got more? I&#39;d love to hear them. The funniest 20 will be used in a followup post!</p> http://soundpostmedia.com/article/you-might-be-bad-drupal-developer-if</link> http://soundpostmedia.com/article/you-might-be-bad-drupal-developer-if 2012-07-22T09:12:00+00:00 Drush Tip: Use sql-sync to Quickly and Easily Move a Database <p>If you&rsquo;re using Drupal best practices, you probably maintain different copies of your website (e.g. some combination of production, staging, development, and local development environments). But what happens when your local copy needs to be synchronized with the latest content and configurations stored in the live production database?</p> <p>If you&rsquo;re not familiar with command line tools, the process can be super tedious. Typically it goes like:</p> <ol> <li> Visit your production environment/website and login.</li> <li> Navigate to the backup and migrate module page.</li> <li> Export the database.</li> <li> Visit your local development environment/website.</li> <li> Navigate to the backup and migrate module page.</li> <li> Import.</li> </ol> <p>Not difficult, but if you have to do this even once a day, that time adds up. Before I knew this simple drush tip, I would spend as much as an hour doing a single sync because of the long waiting periods in between these steps for large databases.</p> <p>It&rsquo;s time to get that hour back!</p> <h2 id="enter_drush8217_sql_sync"> Enter Drush&rsquo; sql-sync</h2> <p>Once you&rsquo;ve created your drush aliases (this tip coming soon), you can run the following command:</p> <p>drush sql-sync @server-alias.prod @server-alias.local --create-db</p> <p>In a nutshell here&rsquo;s what happens. 1. Drush tells the production server to dump a copy of the database in a temp folder on the production server. 2. That database is then secured copied to the local server. 3. Because we used the --create-db option, the current database is cleared out (by default, the import merges with the existing database, and that can be bad!). 4. The new, local copy of that database file is imported to the local environment.</p> <p>That&rsquo;s it! Sure, you can&rsquo;t avoid the time it takes for the database dump, transfer, and import. However, that is all happening automatically from that one command, so you can go back to doing other things if the database is large and/or the connection speed is slow.</p> <h2 id="additional_possibilities"> Additional Possibilities</h2> <p>This example was for just one direction and for one point to point transfer. You can also push in the other direction (NOT RECOMMENDED) as well as pull from a staging or dev environment to get specific changes. You could also chain them together at the same time to pull a copy of the production server to the staging, dev, and local dev environments all at once.</p> <p>Now THAT is powerful stuff!</p> <h2 id="additional_information"> Additional Information</h2> <p>To effectively use this tip, you need to have some other configurations in your drush alias file located in ~/.drush. Here is an example excerpt from ~/drush/sitename.aliases.drushrc.php</p> <pre> $aliases[&#39;dev&#39;] = array( &#39;parent&#39; =&gt; &#39;@parent&#39;, &#39;site&#39; =&gt; &#39;sitename.com&#39;, &#39;env&#39; =&gt; &#39;dev&#39;, &#39;root&#39; =&gt; &#39;/var/www/sitename.com/public_html&#39;, &#39;remote-host&#39; =&gt; &#39;remotehost.com&#39;, &#39;remote-user&#39; =&gt; &#39;username&#39;, ); </pre> <p>More on drush aliases and alias files will be included in a future tip!</p> <h2> Youtube Version</h2> <div> <iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/kRIYfwvXFTY" width="420"></iframe></div> http://soundpostmedia.com/article/drush-tip-use-sql-sync-quickly-and-easily-move-database</link> http://soundpostmedia.com/article/drush-tip-use-sql-sync-quickly-and-easily-move-database 2012-06-02T18:37:00+00:00 Comparing Drupal Ubercart and Commerce - Denver Meetup Presentation <p>While smart money is betting on the Commerce module(s) as the goto e-commerce solution for Drupal 7 and beyond, the decision on which solution YOU should use today is not always easy. Because sometimes the answer is neither! To help cut through all the confusion and (hopefully) shed some light on the debate, I was invited to give a short presentation at the Denver Drupal meetup to compare and contrast the two. While the talk was by no means the definitive answer, it intent was merely to help people understand the key differences in and get started on their own evaluation.</p> <p>The full video can be found <a href="http://www.denveropenmedia.org/project/dbug-meetups-open-media-foundation/show/april-2012-dbug-meet-denver-open-media">here</a>. A big big thanks to <a href="http://www.denveropenmedia.org">Denver Open Media</a> for filming and archiving this video! We really appreciate it.</p> http://soundpostmedia.com/article/comparing-drupal-ubercart-and-commerce-denver-meetup-presentation</link> http://soundpostmedia.com/article/comparing-drupal-ubercart-and-commerce-denver-meetup-presentation 2012-05-30T19:38:00+00:00 "If I Only Knew" - 7 Simple Tips to Improve Your Drupal Skills <p>5 minutes&mdash;That&rsquo;s all it took to find, enable, and configure a module that ultimately replaced the 40+ hours of custom work I just completed. And this was not an isolated incident within my 3 years of using Drupal. I still find myself reinventing the wheel versus using the &lsquo;one thing&rsquo; (module/theme/patch/strategy) that&rsquo;s already exists.</p> <p>The art, of course, is knowing where that &lsquo;one thing&rsquo; is amidst <a href="http://drupal.org/download">ALL</a> the Drupal information out there. Even some of the top contributors bemoan how difficult to stay on top of it all.</p> <p>My advice: Don&rsquo;t give up! You don&rsquo;t need to know everything to be effective. There are some very simple ways to <a href="http://www.chrisbrogan.com/grow-bigger-ears-in-10-minutes/">grow bigger ears</a> and stay generally informed without requiring a full time job&rsquo;s worth of effort. Here are 7 simple tips to quickly improve your Drupal knowledge.</p> <h2 id="follow_drupal_planet"> 1. Follow Drupal Planet</h2> <p><a href="http://drupal.org/planet">Drupal Planet</a> aggregates content from over 400 different Drupal related blogs and news outlets. Not only is this super convenient, but it gives you the ability to see a cross section of the entire community.</p> <h2 id="get_a_drupal_account"> 2. Get a Drupal Account</h2> <p>Do you know that less than 1% of all Drupal users actually have a <a href="http://drupal.org/user">drupal.org account</a>? If you&rsquo;re in this boat, you&rsquo;re missing out on the ability to:</p> <ul> <li> submit feature requests.</li> <li> report bugs (and more likely see them fixed as a result).</li> <li> join groups to follow conversations on a given topics of interest.</li> <li> get job opportunity alerts.</li> <li> user your user dashboard to quickly track all of the above.</li> </ul> <p>I wish I had done this from day 1. I&rsquo;ve gained a lot of wisdom as well as helped the community in lots of little ways.</p> <h2 id="join_a_drupal_group"> 3. Join a Drupal Group</h2> <p>If you are passionate about a given topic (SEO, geolocation, HTML5, etc.), <a href="http://groups.drupal.org/groups">join their groups</a>! You&rsquo;ll be in the loop and can even help direct the conversation by adding your input.</p> <h2 id="go_to_a_meetup"> 4. Go to a meetup</h2> <p><a href="http://drupal.meetup.com/">Meetups</a> are a great way to interact with other Drupal enthusiasts in your area. You can make some friends, get tips, ask questions with more seasoned members of the community, etc. In my very first meeting, I learned about several modules and strategies that I used the very next day. It&rsquo;s an amazingly useful resource.</p> <h2 id="join_irc"> 5. Join IRC</h2> <p>Sometimes the fastest way to find an answer is to just ask a simple question. If you can&rsquo;t find it on google, there are no less than 400 people in the <a href="http://drupal.org/irc">#drupal channel of IRC</a> who might know the answer. Many will actively answer questions and otherwise converse about any topic germane to Drupal.</p> <h2 id="get_their_books"> 6. Get their books</h2> <p>Online Drupal documentation is great, but I find it far too fragmented. Thankfully, their are <a href="http://www.packtpub.com/books/drupal">entire collections</a> of ebooks that cover just about every major Drupal topic available. I use them for both step-by-step examples, sample code, reference, and general knowledge of a given topic.</p> <h2 id="listen_to_podcasts_and_screencasts"> 7. Listen to podcasts and screencasts</h2> <p>Companies like <a href="http://www.lullabot.com">Lullabot</a> produce a series of extremely <a href="http://www.lullabot.com/ideas/podcasts">useful podcasts</a>, featuring interviews with top Drupal contributors. Companies like <a href="http://www.commerceguys.com/">Commerce Guys</a> produce <a href="http://vimeo.com/channels/commerceguys">screencasts</a> to walk you through the beginning, intermediate, and advanced level details of setting up a store.</p> <h2 id="your_advice"> Your Advice?</h2> <p>Do you have a favorite tip? Leave a comment and I&rsquo;ll add to the list.</p> http://soundpostmedia.com/article/if-i-only-knew-7-simple-tips-improve-your-drupal-skills</link> http://soundpostmedia.com/article/if-i-only-knew-7-simple-tips-improve-your-drupal-skills 2012-05-30T19:37:00+00:00 The Basics of Content Type Design in Drupal <p>Here is a simple video I put together to go over some high level tips and strategies for designing content types for a new Drupal site. Basically you want to remember 4 things:</p> <ul> <li> Will I actually use this content type enough to warrant it&#39;s own designation?</li> <li> Can I simplify the name to something generic versus overly specific?</li> <li> Whare are the structure requirements for this type?</li> <li> Can I simply use a tagging system to differentiate between similarly structured content?</li> </ul> <p>The video includes the use of a mind map in creating a design.</p> <div><iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/k0bHiSfFs-g" width="560"></iframe></div> http://soundpostmedia.com/article/basics-content-type-design-drupal</link> http://soundpostmedia.com/article/basics-content-type-design-drupal 2012-05-30T19:36:00+00:00 11 Top Drupal Modules: In Layman's Terms <p><em>For the impatient, click <a href="#drupal-module-table-of-contents">here</a> to dive right into the list!</em></p> <p>The joke goes: Drupal doesn&#39;t have a learning curve, it has a learning cliff. Funny, but only to those who have strapped on their boots and scaled this steep obstacle, falling numerous times in the process, but living to tell their war stories another day. The question is, is it worth the effort? Absolutely! Drupal is arguably one of the best (if not THE best) CMS&#39;s out there. It has amazing core functionality, a community filled with fanatical enthusiasts like myself, and a wide array of contributed modules to fill in all the gaps where you need things <em>just</em> right. And when that fails, you can customize it to your heart&#39;s content.</p> <p>When you put it altogether, you can do just about anything with Drupal. That is, if you have the proper know-how...</p> <p class="rtecenter"><img alt="" src="/images/content/4035415614_66f4ac8ab3.jpg" style="width: 250px; height: 374px; " /></p> <p class="rtecenter"><em>Ready to scale the Drupal learning &#39;cliff&#39;? Strap on your boots!<br /> Image used under Creative Commons from <a href="http://www.flickr.com/photos/20422510@N06/4035415614/">Sirio</a>.</em></p> <p>For many, staring at the cliff in front of them can be paralyzing, but it doesn&#39;t have to be this way. If you just learn some of the basics about some key pieces and modules, you can at least know what is possible and explain your vision to someone who can fill in the details, and ultimately get the website you want.</p> <p>The goal of this article is to give you the layman&#39;s lowdown on some of the top Drupal modules. Leave a comment if I could make the explanations even better!</p> <h2> <a name="drupal-module-table-of-contents"></a>The List</h2> <ol> <li> <a href="#drupal-views-module">Views</a></li> <li> <a href="#drupal-fields-module">Fields</a></li> <li> <a href="#drupal-media-module">Media</a></li> <li> <a href="#drupal-feeds-module">Feeds</a></li> <li> <a href="#drupal-features-module">Features</a></li> <li> <a href="#drupal-rules-module">Rules</a></li> <li> <a href="#drupal-panels-module">Panels</a></li> <li> <a href="#drupal-drush-module">Drush</a></li> <li> <a href="#drupal-skinr-module">Skinr</a></li> <li> <a href="#drupal-overlay-module">Overlay</a></li> <li> <a href="#drupal-administration-menu-module">Administration Menu</a></li> </ol> <h2> <a name="drupal-views-module"></a>1. <a href="http://drupal.org/project/views">Views</a></h2> <p><strong>What it does:</strong> Views allows you to organize, arrange, and display your content based on a variety of criteria (date, time, tags, etc).</p> <p><strong>Simple example:</strong> You want to display a list of titles and dates (but not locations) of your next 12 events that are both tagged with NY and have a price of less than $100.</p> <p>Unless you&#39;re a casual blogger, your website may have different types of content: events, articles, posts, videos, audios, etc. And just like it doesn&#39;t make sense to organize and display your photos in the same manner you would a collection of DVDs or magazines, you&#39;re probably going to want to display your website content differently depending on the content and the context.</p> <ul> <li> Events: you may want sorted by date and only list the most pertinent information up front (date + location).</li> <li> Articles: it may make more sense to display an image and perhaps a small amount of text.</li> <li> Videos: showing in the sidebar doesn&#39;t make sense because they probably won&#39;t fit. So you&#39;ll at most want to show a thumbnail and title.</li> </ul> <p>With views, you can set: your filters (which types of data), you sorting (alphabetical, by date, etc), your display (grid, list, full view), and a whole host of other options. It&#39;s so useful that I&#39;d go as far to say it&#39;s a mandatory module to include and use on your site, even if you&#39;re &#39;just blogging.&#39;</p> <h2> <a name="drupal-fields-module"></a>2. <a href="http://api.drupal.org/api/drupal/modules--field--field.module/7">Fields</a></h2> <p><strong>What it does:</strong> Fields allows you to specific types of information to content.</p> <p><strong>Simple example:</strong> An event may get the following fields: date, time, email address, phone number, location, contact person, etc.</p> <p>When a lot of people think of websites, they think of simply copying and pasting text from a MS word document and (PRESTO!) the work is done. That&#39;s fine, but what if you later want to display only parts of that information? Use the event listing in the Views example above. If I just wanted to display a list of dates, I couldn&#39;t simply tell Drupal to psychically know which bits of information within the pasted text I wanted to pull out.</p> <p>However, if I break things up into specific fields, then I have the option to display or not display them on a field by field basis. I can also rearrange their order. I can also validate and force people to enter a real email address versus adfasdf@afdfasdf.net (which garbage-like input that I typically use when I don&#39;t want to give a real address).</p> <p>So fields provides a way to add a little more structure to an otherwise copy and paste blob of information. And if you ever find yourself asking: &quot;Can I just make a list of phone numbers?&quot; You probably should have used fields to divide up the pieces of your content and then used views to output it all.</p> <h2> <a name="drupal-media-module"></a>3. <a href="http://drupal.org/project/media">Media</a></h2> <p><strong>What it does:</strong> Provides a systemwide method to import, arrange, manage, and display your audio, video, images, and documents across the website.</p> <p><strong>Simple example:</strong> I want to upload a bunch of photos and then browse and paste them into specific article posts.</p> <p>Most people who are not experienced with websites are surprised to find out that it&#39;s very difficult to simply &#39;paste&#39; in their images directly into the site itself. So it can be a huge hassle to manage their media on their locale machine as well as navigate folders and such on the website as well.</p> <p>The media module provides an elegant solution to this media management madness. It allows you to upload your media content once and essentially browse, access, and insert it everywhere else you want it. It does way more than this, but this feature alone will save you time and improve the quality of your experience managing your website.</p> <h2> <a name="drupal-feeds-module"></a>4. <a href="http://drupal.org/project/feeds">Feeds</a></h2> <p><strong>What it does:</strong> allows you to automate the importation of large quantities of data.</p> <p><strong>Simple example:</strong> a excel document containing product titles, descriptions, sizes, prices, and images is uploaded into feeds and then (POOF) 1000+ store items are now in your online catalog and ready to sell.</p> <p>Moving from one CMS to another can be very difficult and time consuming. Plus, who has the time or money to do this all by hand? What feeds does is give you several options. You specify the format of your data (RSS, XML, CSV, or other tabulated formats). You specify where it&#39;s coming from (website URL or is this a file?). You specify where the data should go (events vs articles). Finally, you can specify how your data matches up to the fields you created (&#39;product name&#39; in your file excel file matches to &#39;title&#39; in the Drupal content node).</p> <p>So feeds is a wonderful way to save your sanity and get your content imported fast. Also be sure to check out the migrate module, which is similar in functionality.</p> <h2> <a name="drupal-features-module"></a>5. <a href="http://drupal.org/project/features">Features</a></h2> <p><strong>What it does:</strong> Allows you to save, revert, update, and move your custom configurations across multiple sites without having to manually re-enter them every time.</p> <p><strong>Simple example:</strong> I just created several content types (events, articles, case studies, people, etc) that I want to install on another clients website without spending several, tedious hours putting each configuration in one by one.</p> <p>This module&#39;s name is a bit of a misnomer. When you hear &#39;features,&#39; you&#39;re probably thinking of bells and whistles like what you&#39;d find on a car: anti-lock breaks, power steering, etc. The features module would be more akin to copying these car features from one model (Ford Explorer) and automatically copying them into each other model (Ford Taurus, Escape) without having to start from scratch each time for features that are 95% the same in all cases.</p> <p>So the features module is more of a container for things that you have created and want to save and port around with you. It&#39;s super useful. If someone changes your content structures, features will tell you your configuration was overridden. Want to revert it back? Just click a button. Want to install the same features for 5 different at the same time, the features module will save you hours of time and lots of tedious menu surfing.</p> <h2> <a name="drupal-rules-module"></a>6. <a href="http://drupal.org/project/rules">Rules</a></h2> <p><strong>What it does:</strong> When some event happens, do something if certain conditions are met.</p> <p><strong>Simple example:</strong> when someone logs in, send off an email to the website administrator if the user hasn&#39;t written an article in the last 2 weeks.</p> <p>Rules are made up of 3 components: an event, conditions, and actions. Drupal core and certain 3rd party modules define a wide array of events that can be tracked, such as user events (logging in, logging out, posting comments), node events (content created, deleted, updated), etc. Conditions help filter out whether a response is necessary. We may not want to send an email off to every user in the system, but we might want to send a reminder along to a person who hasn&#39;t logged in for several months.</p> <p>Rules are essentially a handy way of systematizing certain tasks in your website, which can improve the user experience and drastically reduce maintenance requirements. If you find yourself doing the same repetitive tasks over and over again, chances are you can setup a rule to handle it for you.</p> <h2> <a name="drupal-panels-module"></a>7. <a href="http://drupal.org/project/panels">Panels</a></h2> <p><strong>What it does:</strong> Allows you customize the spatial arrangement of how content lays across the page.</p> <p><strong>Simple example:</strong> I want my homepage to have a banner that spans full width, followed by 3 columns of text below that, and followed by 2 banners side by side on the bottom.</p> <p>Clients love to imagine their webpages as a blank canvas where anything goes and every possible pixel is customizable. CMS&#39;s love to provide a more rigid structure by which similar content can pipe through and get a consistent look and feel across large sets of content.</p> <p>One side wants fully custom, the other wants fully structured. This leads to a healthy tension to try and achieve the best of both worlds. Enter panels, an interface that gives site architects and designers enormous flexibility in how the content gets arranged on the page. And in addition to simple spatial positioning, one can even change what is displayed based a user&#39;s permissions and other contextual conditions.</p> <p>So if you&#39;re unhappy with the rigidness of Drupal&#39;s block and region system, panels will be your best friend in giving you more flexibility in getting the layout and arrangement you want without sacrificing the power of and speed of using a CMS.</p> <h2> <a name="drupal-drush-module"></a>8. <a href="http://drupal.org/project/drush">Drush</a></h2> <p><strong>What it does:</strong> Allows you to completely manage multiple Drupal sites from a single command line interface.</p> <p><strong>Simple example:</strong> I have to update 30 modules. I could go to each module webpage, download, unzip, and move them all by hand over several hours. Or I could run &quot;drush up&quot; and have the entire process finish in less than 5 minutes.</p> <p>This is mainly for command line geeks like myself, but don&#39;t let that scare you away from understanding the power and flexibility of this module/tool. Like every other major CMS, Drupal is constantly evolving both with bug fixes and feature enhancements. What this means is that there is always the need for continual, ongoing maintenance to make sure your website continues to operate smoothly. And even with a single, small website, thee sheer number of these updates can take up considerable time and mental effort to keep up with.</p> <p>Drush is an amazing tool that is essentially an air traffic control for every Drupal website you operate. You can check the status, update, and manage multiple sites at the same time and without having to even load up a web browser. For those wanting to spend more time building sites instead of maintaining them, drush is an invaluable tool.</p> <h2> <a name="drupal-skinr-module"></a>9. <a href="http://drupal.org/project/skinr">Skinr</a></h2> <p><strong>What it does:</strong> Skinr provides a front-end way for site admins to change the look and feel of blocks of content without having to know the technical details in the back end.</p> <p><strong>Simple example:</strong> I want to change the color of my menu from blue to green, so I simply click the skinr button on the menu block and select the green style option.</p> <p>Nobody likes a website that they can&#39;t control. Clients can be particularly upset when they realize they can&#39;t do minor tweaks (such as the change of a font color in the footer), without going through a long, convoluted process of editing CSS files, committing the changes, etc. They just want a different shade of red!</p> <p>This is where skinr is extremely handy. Instead of just having a single design, a webmaster can create a series of styles and allow people on the front end to toggle between them. These style differences could be simple color changes, or night and day differences. Also, these skins can be exported and shared among many others as well, allowing designers to use their favorite styles over and over again across multiple websites.</p> <p>Skinr is not quite ready for Drupal 7, but expect an update soon!</p> <h2> <a name="drupal-overlay-module"></a>10. <a href="http://drupal.org/documentation/modules/overlay">Overlay</a></h2> <p><strong>What it does:</strong> Overlay allows you to access admin areas without leaving the page you were on in the public areas of the site.</p> <p><strong>Simple example:</strong> I&#39;m viewing a iTunes-like catalog of my media and I&#39;d like to turn on a module that adds a facebook like button. I can do this without having to navigate to the facebook settings page and then have to remember the exact URL I was at when viewing the catalog.</p> <p>Many people don&#39;t really appreciate just how useful the overlay is. To me, it&#39;s the number 1 thing that sold me on Drupal 7. I was in the process of developing a catalog view for a piece of software I&#39;m developing. When this started in Drupal 6, it was super frustrating to jump back and forth between pages all the time. I&#39;d keep losing my place and I&#39;d have to bookmark or create links for everything. I started to design my own overlay in jquery UI, but I really didn&#39;t have the time to create an entire interface from scratch.</p> <p>But then I started playing with the Drupal overlay system and I was hooked immediately. I could now do all my back end changes and still not lose my spot. It sounds like a trivial, stupid thing. But try to go back to Drupal 6 after you get used the overlay, and you&#39;ll miss it dearly!</p> <h2> <a name="drupal-administration-menu-module"></a>11. <a href="http://drupal.org/project/admin_menu">Administration Menu</a></h2> <p><strong>What it does:</strong> provides you a simple, thin toolbar at the top of your browser where you can access virtually every possible administrative area on your website in a single click.</p> <p><strong>Simple example:</strong> Instead of clicking 4 times to get to the facebook like settings (/admin, then /admin/settings, the /admin/settings/fb_social, then /admin/settings/fb_social/like), I can now hover over each item and watch the sub menus appear, and get to exactly where I want in one click.</p> <p>&quot;Where the heck is everything?&quot; I asked myself this question over and over the first time I started with Drupal 6. Yes, everything was neatly organized in a neatly defined hierarchy, but that meant you had to do a lot of poking around to see what exactly was &#39;behind door number 2.&#39;</p> <p>With the admin menu, you get one thin menu across the top that can get you virtually anywhere in the system within a single click. But beyond the mere speed and convenience, there is a more important benefit. You get the opportunity to explore the entire site structure from a single location. Once you understand the method to the organizational madness, you&#39;ll have a better idea of where to look for things when you need them next time. You&#39;ll also get better at predicting where new things should appear when you turn them on.</p> <p>This is the FIRST module I turn on when I do a fresh Drupal installation. Without it, I easily double my time spent just getting around the site.</p> <h2> How can I improve this?</h2> <p>I make no claims that this is a definitive guide, nor do I claim I made this as clear as I could have. So I welcome any feedback, advice, or examples in how I could explain this even better. The better we are at communicating how to use Drupal for those facing the learning cliff, the more likely they will be in joining us on this journey and within our community.</p> <h2> Share the knowledge</h2> <p>And don&#39;t forget to send along to anyone else that would benefit from this simple set of overviews. If they get anything out of it, you&#39;ll be there Drupal hero!</p> <p>&nbsp;</p> <p><em>Drupal word cloud image used under Creative Commons from <a href="http://blamcast.net/articles/drupal-modules-word-cloud">Blamcast.net</a>.</em></p> http://soundpostmedia.com/article/11-top-drupal-modules-laymans-terms</link> http://soundpostmedia.com/article/11-top-drupal-modules-laymans-terms 2012-05-30T19:34:00+00:00 5 Reasons You'll Love Using Drush With Drupal <p>The command line: most programmers love its power; most web users fear its (alleged) complexities. But for those willing to dive in, the reward is great. Using Drush on Drupal can save you several hours a week just on website maintenance tasks alone. Here is a short list to get you started:</p> <h2> 1. Download and Install Multiple Modules Simultaneously</h2> <p>Installing modules on drupal is easy. You just have to</p> <ol> <li> Go to Drupal.org</li> <li> Search for the module&#39;s page</li> <li> Download the module&#39;s zip file</li> <li> Unzip</li> <li> Move to sites/all/modules</li> <li> Open up your web browser</li> <li> Go to the modules page</li> <li> Click off the checkbox for the module</li> <li> Save your changes</li> </ol> <p>That&#39;s 9 steps per module. And if you have 30+ modules to install, that can take up to several hours if you&#39;re not nimble with your keyboard and mouse. With drush, you can do it in 2 lines:</p> <p><strong>Download command:</strong></p> <p><code>drush dl addressfield admin_menu advanced_help amazon_s3 awssdk backup_migrate boxes calendar ckeditor ckeditor_swf coder commerce commerce_features commerce_feeds commerce_file commerce_product_key contemplate context ctools custom date devel devel_themer drupalforfirebug echo email emogrifier entity facebook_pull fb_social features feeds feeds_querypath_parser feeds_tamper feeds_xpathparser field_group filter_transliteration flowplayer getid3 globalredirect gmap google_analytics grammar_parser hacked html5_tools htmlmail i18n imce include job_scheduler jplayer jquery_update kfs libraries link location mailchimp mailmime mailsystem md5check media media_amazon media_browser_plus media_flickr media_youtube mediaelement menu_block migrate mimemail nice_menus omega_tools panels pathauto pathologic plupload quicktabs references relation rolereference rules search_api service_links services sexybookmarks skinr styles token transliteration viewfield views views_accordion views_bulk_operations views_pdf workbench workbench_access workbench_files workbench_media workbench_moderation wysiwyg xmlsitemap</code></p> <p><strong>Install command:</strong></p> <p><code>drush install addressfield admin_menu advanced_help amazon_s3 awssdk backup_migrate boxes calendar ckeditor ckeditor_swf coder commerce commerce_features commerce_feeds commerce_file commerce_product_key contemplate context ctools custom date devel devel_themer drupalforfirebug echo email emogrifier entity facebook_pull fb_social features feeds feeds_querypath_parser feeds_tamper feeds_xpathparser field_group filter_transliteration flowplayer getid3 globalredirect gmap google_analytics grammar_parser hacked html5_tools htmlmail i18n imce include job_scheduler jplayer jquery_update kfs libraries link location mailchimp mailmime mailsystem md5check media media_amazon media_browser_plus media_flickr media_youtube mediaelement menu_block migrate mimemail nice_menus omega_tools panels pathauto pathologic plupload quicktabs references relation rolereference rules search_api service_links services sexybookmarks skinr styles token transliteration viewfield views views_accordion views_bulk_operations views_pdf workbench workbench_access workbench_files workbench_media workbench_moderation wysiwyg xmlsitemap</code></p> <p>The above commands may look ominous, but it&#39;s just drush &#39;command&#39; and then a list of modules. Drush takes care of the rest.</p> <h2> 2. Automatic Module Updates</h2> <p>Updating modules can be a pain. You have to check for avaialble updates, then repeat the process above in #1. Or, you can run: &quot;drush up.&quot; This will tell drush to:</p> <ol> <li> check which modules are installed on the current site</li> <li> check to see if there are updates available</li> <li> notify you what modules are out of date</li> <li> ask you if you&#39;d like to proceed</li> <li> download all the modules and place them into the proper location</li> <li> run update.php for you</li> </ol> <p>This function alone saves me 2 hours a week.</p> <h2> 3. Quickly Clear All Caching</h2> <p>You made a change to your site, but it&#39;s just not showing up! It might be a cache thing. Views, blocks, css, javascript: many components of Drupal are cached for performance. But this can make development difficult because you need to keep navigating to the admin areas to clear the system cache and flush the changes.</p> <p>OR, you can run &quot;drush cc all&quot; to clear all the caching systems at the same time. This is super convenient.</p> <h2> 4. Easy Backups</h2> <p>If you&#39;re developing on the bleeding edge (Drupal 7 with only dev versions of all of your modules, possibly with patches), you&#39;ve probably experienced a corrupt database that simply could not be recovered. No fun. The easiest way to protect yourself is quick backups. But just like clearing your cache, you don&#39;t want to have to leave the page you&#39;re on and come back. Simply run &quot;drush bam-backup&quot; and a database copy will be generated and downloaded into the manual backups directory. For bleeding edge projects, I use this command compulsively because it&#39;s saved me so many times.</p> <h2> 5. Control multiple sites</h2> <p>If you run more than one site (or a dozen sites), it can be tedious to manually update the modules at the same time. But drush allows you to create scripts and installation profiles, so you can quickly run the same commands on all of them. &quot;drush @site1 up; drush @site2 up; drush @site3 up&quot; would run the module update commands on 3 different sites, one right after another, without having to navigate your terminal to each site in between. This gives you a command center feel and allows you to connect to each site from one location, saving lots of time and focus for the bigger tasks at hand.</p> <p>&nbsp;</p> <p>I hope you enjoyed this. If you have any questions or things to add, please leave a comment below. Are you using drush? If not, what&#39;s holding you back?</p> <p>PS. If you&#39;re already a fan, you can buy the <em>I heart drush</em> <a href="http://barthy.spreadshirt.com/us/US/Shop/Article/Index/article/I-heart-DRUSH-4552778">here</a>.</p> http://soundpostmedia.com/article/5-reasons-youll-love-using-drush-drupal</link> http://soundpostmedia.com/article/5-reasons-youll-love-using-drush-drupal 2012-03-30T19:29:00+00:00