Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 20 min 5 sec ago

Code Drop: Drupal Security Tips for Developers

Wed, 12/10/2014 - 06:30
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpI’ve recently been reviewing a few security related patches and it soon became apparent that many developers make the same mistakes over and over in regards to best practices for security in a href= So below, a very short post on the common mistakes and solutions./p h2Correct usage of t()/h2 pUse the right placeholder for a href= You should be using % and @ which are both escaped to protect against Cross Site Scripting vulnerabilities. Whenever you use ! as a placeholder, double check the content has already been escaped./p h2Escaping Output in #markup/h2 pIf you’re providing a custom field, widget and formatter you need to make sure that any content coming from the admin is correctly escaped. For example, you’re implementing hook_field_formatter_view() and doing something like:/p p /p/div/div/div

Drupal governance announcements: DrupalSouth - Early Bird tix almost sold out!

Wed, 12/10/2014 - 03:26
pThere are only a few early bird tickets left. So if you want one, grab it now./p pa href= title=

Pixelite: How to add subtabs under the User Edit tab in Drupal

Wed, 12/10/2014 - 02:00
h2 id=tldrtl;dr;/h2 pTo get your tabs to appear on the user edit page use a href= and a href= h2 id=the-detailThe detail/h2 pGetting submenu items to appear within the user edit area of Drupal has not always worked as I would expect from reading the documentation around a href= As it happens the user module provides hooks to make this quite simple./p pa href= allows you to return a subset of the parameters you’d expect to see in a href= pIn this example we would have a new set of tabs added to the User Edit page. The first is emAccount/em and is now presented because we have more than one tab here now. The second is emReport Settings/em and it would have a URL like codeuser/12345/edit/report_settings/code where emreport_settings/em is taken from the name parameter./p div class=highlightprecode class=language-php data-lang=phpspan class=cplt;?php/span span class=sd/**/span span class=sd * Implements hook_user_categories()./span span class=sd *//span span class=kfunction/span span class=nfmy_module_user_categories/spanspan class=p()/span span class=p{/span span class=kreturn/span span class=karray/spanspan class=p(/span span class=karray/spanspan class=p(/span span class=s1#39;name#39;/span span class=o=gt;/span span class=s1#39;report_settings#39;/spanspan class=p,/span span class=s1#39;title#39;/span span class=o=gt;/span span class=nxt/spanspan class=p(/spanspan class=s1#39;Report settings#39;/spanspan class=p),/span span class=s1#39;weight#39;/span span class=o=gt;/span span class=mi1/spanspan class=p,/span span class=s1#39;access callback#39;/span span class=o=gt;/span span class=s1#39;user_edit_access#39;/spanspan class=p,/span span class=s1#39;access arguments#39;/span span class=o=gt;/span span class=karray/spanspan class=p(/spanspan class=mi1/spanspan class=p),/span span class=p)/span span class=p);/span span class=p}/span span class=cp?gt;/spanspan class=x/span/code/pre/div pAt this point we have a new menu item presented as a tab on the user edit page and clicking it takes us to a blank form with a submit button. I think this is due to the way menu items can inherit behaviour from parent menu items. We’ll be wanting to overload that behaviour though and present our own form. This can be done through a href= pChecking the keys of the array passed to a href= we should find that we have a new one called codeuser/%user_category/edit/report_settings/code. We can edit this one to point it at our preferred form built using the a href= API/a as usual./p div class=highlightprecode class=language-php data-lang=phpspan class=cplt;?php/span span class=sd/**/span span class=sd * Implements hook_menu_alter()./span span class=sd *//span span class=kfunction/span span class=nfmy_module_menu_alter/spanspan class=p(/spanspan class=oamp;/spanspan class=nv$callbacks/spanspan class=p)/span span class=p{/span span class=nv$callbacks/spanspan class=p[/spanspan class=s1#39;user/%user_category/edit/report_settings#39;/spanspan class=p][/spanspan class=s1#39;page arguments#39;/spanspan class=p]/span span class=o=/span span class=karray/spanspan class=p(/spanspan class=s1#39;my_module_user_report_settings#39;/spanspan class=p,/span span class=mi1/spanspan class=p);/span span class=c1// We need to set the file path as it defaults to the user module./span span class=nv$callbacks/spanspan class=p[/spanspan class=s1#39;user/%user_category/edit/report_settings#39;/spanspan class=p][/spanspan class=s1#39;file path#39;/spanspan class=p]/span span class=o=/span span class=nxdrupal_get_path/spanspan class=p(/spanspan class=s1#39;module#39;/spanspan class=p,/span span class=s1#39;my_module#39;/spanspan class=p);/span span class=nv$callbacks/spanspan class=p[/spanspan class=s1#39;user/%user_category/edit/report_settings#39;/spanspan class=p][/spanspan class=s1#39;file#39;/spanspan class=p]/span span class=o=/span span class=s1#39;;/spanspan class=p;/span span class=p}/span span class=cp?gt;/spanspan class=x/span/code/pre/div h2 id=gotchasGotchas/h2 ul liYou will want to be clearing your menu cache a lot while getting this working. Every edit will require a codedrush cc menu/code./li liEnsure you have set the codefile path/code in the hook_menu_alter() if you have your have your page callback or form function for drupal_get_form() in a separate file./li /ul h2 id=commentsComments/h2 pIf you have found that this post has been helpful ping me in the comments, on twitter (a href= or on a href=http://drupal.orgD.o/a at a href=

Chapter Three: Principles of Configuration Management - Part One

Tue, 12/09/2014 - 21:16
pThis is the first in a series of posts about Drupal 8's configuration management system. This system is one of its most eagerly anticipated features, a href= to a recent survey/a. The Configuration Management Initiative (CMI) was the a href= Drupal 8 initiative to be announced in 2011/a, and we've learned a lot during thousands of hours of work on the initiative since then. These posts will share what we've learned and provide background on the why and how./pbr / br / pimg alt=A set of dials and controls symbolising configuration management in Drupal 8. data-picture-align=center data-picture-group=c3 src= style=font-size: 13px; line-height: 20.0063037872314px; //p

Open Source Training: Filter Drupal Content Based on File Type

Tue, 12/09/2014 - 20:11
!-- Start ScreenSteps Content -- div class=LessonContent div class=LessonSummary pimg style=float: right; src= alt=file filter /One of our members asked an interesting question about Views./p pThey had a file field on their user profiles. In that field, the user could upload an image, an audio file, or link to a YouTube video. So far, so good. However, in Views, they only wanted to show that field if it contained a video./p pHere's the solution to that problem. We're going to show you how to filter Drupal content based on the type of file that's attached to it./pimg src=// height=1 width=1 alt=/

Drupal Watchdog: Test Now! - Travis Integration for your Drupal Modules

Tue, 12/09/2014 - 19:46
div class=field field--body field-type-text-with-summary field-label-hidden field--rss pa href= is a free-for-OSS continuous integration server, which has become very popular in the PHP world. Drush, Symfony, and dreditor all use it for frequently testing their code base and pull requests for regressions and ensuring new functionality has the needed test coverage./p pCompared to the current Drupal testbot, Travis-CI allows testing of not only simpletest on PHP 5.3 (for Drupal 7 projects), but of most everything that you can install on a Debian system, e.g. QUnit for JavaScript, Behat, PHPUnit, but also Ruby based projects, Bash projects, Go projects, etc./p pYou can also test various scenarios in a matrix like setup, e.g. different PHP versions to ensure your code runs on both PHP 5.3 and 5.4 or with different versions of a dependent library./p pThis flexibility comes with a price however, because you need to setup the whole environment yourself. The selected PHP version (with xdebug) and composer are pre-installed, but that's it. The Drupal base installation, the running of the tests, the parsing of the test output, and ensuring dependencies are there is all your own responsibility./p pAnd because of that there are many different span class=geshifiltercode class=php geshifilter-php.travis.yml/code/span files floating around the net for various scenarios of setting up this or that, but in the end everyone re-invents the wheel. Until now…/p h2As Easy as it Gets/h2 pI am proud to announce the a href= drupal_ti project/a, which allows any module on to easily leverage for testing:/p ulliPHPUnit/li liSimpleTest/li liBehat/li /ulpThe process (which I will show in more detail below) is as simple as copying a generic span class=geshifiltercode class=php geshifilter-php.travis.yml.dist/code/span file as span class=geshifiltercode class=php geshifilter-php.travis.yml/code/span to your modules root, push your repository to Github, activate the repository at and you are done./p pOh, and while you are at it, if you add a span class=geshifiltercode class=php geshifilter-php.coveralls.yml/code/span file, then code coverage is automatically reported to a href=, too (for PHPUnit)./p pAll the hard work of installing drupal, running a web server, setting up Selenium, etc. is done by drupal_ti./p pSo you don't have to copy some span class=geshifiltercode class=php geshifilter-php.travis.yml/code/span you found on the net and spend hours debugging little edge cases (HHVM and sendmail, how to parse the simpletest output, etc.), but can depend on a proven and self-tested code base./p h2Features/h2 ullistrongDrupal 8 ready/strong: drupal_ti supports both Drupal 7 and 8 modules. Use span class=geshifiltercode class=php geshifilter-phpDRUPAL_TI_ENVIRONMENT=drupal-8/code/span for your Drupal 8 modules./li listrongTested/strong: drupal_ti tests its own code base for both Drupal 7 and Drupal 8 modules./li listrongModular architecture/strong: drupal_ti has so called 'runners' and you can combine either e.g. phpunit simpletest or run them as separate workers by specifying a matrix./li listrongEnvironment aware/strong: drupal_ti has a file for each environment, which makes the code generic for both Drupal 7 and 8./li listrongExamples provided/strong: drupal_ti provides easy examples of the needed files in span class=geshifiltercode class=php geshifilter-phptests/drupal-{7,8}/drupal_ti_test/code/span. So you can get started easily!/li listrongExtensible/strong: By specifying span class=geshifiltercode class=php geshifilter-phpDRUPAL_TI_SCRIPT_DIR_BEFORE/code/span or span class=geshifiltercode class=php geshifilter-phpDRUPAL_TI_SCRIPT_DIR_AFTER/code/span you can easily create your own runners and environment includes that run before or after the main runners. This could even come from composer./li listrongUsable for non-travis CI/strong: Because drupal-ti is just a command and because span class=geshifiltercode class=php geshifilter-php.travis.yml/code/span just has some environment vars, you can just copy the main declarations to some span class=geshifiltercode class=php file, set the span class=geshifiltercode class=php geshifilter-phpTRAVIS_BUILD_DIR/code/span and use it locally, too./li /ulh2An Example Conversion/h2 pMy module registry_autoload uses simpletest on to test its features. Now I want to test some advanced trait support, which needs PHP 5.4, so is an option to do so./p h3Step 1 - Create the GitHub Repository and Push Your Code/h3 olliSign in to liClick: + gt; New repository, enter: registry_autoload/li liClick: Create repository/li /olpimg src= class=img-responsive alt=Create a new GitHub repository named like your module //p pCopy the commands displayed by Github to push your code to GitHub. I like to use as my upstream and GitHub as my origin remote:/p pre $ git clone --branch 7.x-1.x $ cd registry_autoload $ git remote rename origin upstream $ git remote add origin $ git push -u origin 7.x-1.x /preh3Step 2 - Activate pimg src= class=img-responsive alt=Toggle the project to ON to activate testing //p pNow head over to olliChoose Sign in with GitHub and follow instructions/li liClick on your name at the top right, Fabian Franz for me/li liClick: Sync now if you don't see the repository, yet/li liSimply switch the toggle to ON for the project/li liClick on the repository settings icon (the tools icon)/li liToggle Build only if .travis.yml is present/li liClick on Build history/li liLeave the browser window open/li /olh3Step 3 - Add drupal_ti .travis.yml/h3 pNow checkout a new branch, and add the span class=geshifiltercode class=php geshifilter-php.travis.yml/code/span file:/p pre $ git checkout -b travis-integration $ curl -O $ mv .travis.yml.dist .travis.yml /prep Then, customize the following parts of the file:/p pre # Configuration vars. - DRUPAL_TI_MODULE_NAME=registry_autoload - DRUPAL_TI_SIMPLETEST_GROUP=Registry /prep And:/p pre matrix: # [[[ SELECT ANY OR MORE OPTIONS ]]] - DRUPAL_TI_RUNNERS=simpletest /prep The simpletest group is returned from span class=geshifiltercode class=php geshifilter-phpgetInfo()/code/span in Drupal 7, but an annotation span class=geshifiltercode class=php geshifilter-php@group x/code/span in Drupal 8. Despite the name of the variable, you could also put in a class like span class=geshifiltercode class=php geshifilter-phpRegistryAutoloadTestCase/code/span. Basically anything that SimpleTest accepts on the command line as last argument. The clue is that this variable accepts spaces e.g. DrupalTi Test, which is else very difficult to achieve when passing variables around./p pNow add the file and push to GitHub:/p pre $ git add .travis.yml $ git commit -m Added travis integration $ git push origin travis-integration /preh3Step 4 - Watch the Test Run/h3 pNow head back over to your browser window and magically there will be a new build, click on it and you will see a matrix like structure, here shown for build #2:/p pimg src= class=img-responsive alt=Travis CI build matrix in progress //p pClick on PHP 5.4 and click the little button on the far right with follow, to follow the output./p pAfter a while the build is finished and all tests passed:/p pimg src= class=img-responsive alt=Travis CI build passed //p pstrongCongratulations, your project is now tested on!/strong/p pNow merge, the branch into your mainline and whenever you want to test a change on just push a branch or make a pull request:/p pre $ git checkout 7.x-1.x $ git merge travis-integration $ git push origin 7.x-1.x # Also push the changes back to $ git push upstream 7.x-1.x /prep The easiest way to work with this kind of integration is to push all patches to origin first and once satisfied, push to upstream. That way GitHub and are always in sync./p h2To be Continued…/h2 pIn the next part of this series, I will explore how you can get started with unit testing locally and on (using drupal_ti) and afterwards we will take a look at some easy behat setup./p pIf you are curious and want to start now, take a look at the span class=geshifiltercode class=php geshifilter-phprun-*/code/span scripts in:/p ulli a href= li a href= /ulpEnjoy and please leave me feedback either in the a href= issue queue /a or on the a href= project page/a./p h2About the Author/h2 pFabian Franz is a Senior Performance Engineer and Technical Lead at Tag1br / Consulting. He is author of the registry_autoload, service_container and render_cache modules for Drupal 7 and a contributor to Drupal 8 Core in the form of reviews, patches, and co-leader of the Twig initiative./p /div div class=field field--tags field-type-taxonomy-term-reference field-label-above field--rss div class=field-labelspan class=icon glyphicon glyphicon-tag aria-hidden=true/spanTags:nbsp;/div div class=field-items a href=/tags/testing typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Testing/a a href=/tags/contributed-modules typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Contributed modules/a a href=/tags/third-party-tools typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Third-party tools/a /div/div div class=field field--images field-type-image field-label-above field--rss div class=field-labelImages:nbsp;/div div class=field-items img typeof=foaf:Image class=img-responsive src= width=877 height=531 alt= / img typeof=foaf:Image class=img-responsive src= width=1128 height=485 alt= / img typeof=foaf:Image class=img-responsive src= width=1119 height=510 alt= / img typeof=foaf:Image class=img-responsive src= width=893 height=44 alt= / /div/div

Aten Design Group: Debugging New to You Drupal Blocks

Tue, 12/09/2014 - 18:20
img src= width=1000 height=600 alt= /pLet’s say a friend (or a new client) asks you to make a small change to their Drupal website. You’ve never seen this site before and the original developer(s) are long gone. Of course the text is in some obscure block. Sometimes finding where to make the requested change is easy. Sometimes it’s not. I’m going to go through some debugging tips for such a case./p pThe first thing you should do is inspect that part of the page with your browser’s dev tools (e.g. a href=, a href= Often IDs and class names will help identify the block./p pHere’s an example of the DOM of a view block from the nodequeue module./p pspan class=geshifiltercode class=text geshifilter-textlt;div id=quot;block-views-nodequeue-2-blockquot; class=quot;block block-views contextual-links-region block--marqueequot;gt;/code/span/p pThe ID block-views-nodequeue-2-block means this is a views block. nodequeue-2 is the view machine name, and block is the name of the specific display in that view. You can browse the list of views at /admin/structure/views, or in this case, go directly to /admin/structure/views/view/nodequeue_2/edit/block. The path to edit a view in Drupal 7 is always at /admin/structure/views/view/[VIEW NAME]/edit/[DISPLAY NAME]. If contextual links are on, it may be even quicker to access the edit page from the options available. Look for a gear icon in the upper right corner of the section./p pHere’s a block defined in code:/p pspan class=geshifiltercode class=text geshifilter-textlt;div id=quot;block-cei-custom-blocks-cei-unicef-timelinequot; class=quot;block block-cei-custom-blocks contextual-links-regionquot;gt;/code/span/p pIn this case in cei_custom_blocks_block_info() defines a block delta: span class=geshifiltercode class=text geshifilter-text$blocks['cei_unicef_timeline']/code/span The code that defines this block’s output will either be in span class=geshifiltercode class=text geshifilter-textcei_custom_blocks_block_view()/code/span or that function will call another./p pIn one particular case I didn’t have a lot to go on. There was very little in the DOM. This members page consisted of user images, name, and title. The client requested one additional field be included for each user on the members page. It wasn’t a view or anything else easily identifiable. The output was in system block 0 which doesn't give me anything to go on. One particularly unique class name was block-totem-common-embed-type-search-0 (this was the totem install profile) but a search of the code turned up nothing. That’s because the code that built these blocks was highly abstracted. Reviewing that code didn’t reveal where I could add the field either. Finally I searched on another class name. I didn’t find exactly where the class name was inserted, but it happened to match a template file that was in one of the submodule's ‘inc’ directories./p div class=geshifilterpre class=geshifilter-text lt;divlt;?php print $attributes; ?gt;gt; lt;?php print $user_profile['images']['user_thumb']; ?gt; lt;?php print render($title_prefix); ?gt; lt;h3gt;lt;?php print render($user_profile['name']); ?gt;lt;/h3gt; lt;?php print render($title_suffix); ?gt; nbsp; lt;div class=quot;clearfixquot;gt;lt;/divgt; lt;/divgt;/pre/div pOnce I found that, making the needed modification was simple./p pTo help identify a block, you can also look at what is placing the block on the page. Some ways this can be done include the blocks UI, Context module, Panels, print directly in code, and template files. If a lot of blocks are placed using the blocks UI, this page can get unwieldy. It’s worth searching the codebase for any distinct phrases. A quick search in the database can also be useful./p pBlocks saved in the database are in the blocks and blocks_custom tables. One way to find such a block in the database uses a query for some matching text:/p div class=geshifilterpre class=geshifilter-textSELECT * FROM block_custom WHERE body LIKE quot;%participate in discussions%quot;\G/pre/div pThe query matched the following entry:/p div class=geshifilterpre class=geshifilter-text*************************** 1. row *************************** bid: 3 body: lt;pgt;lt;stronggt;A message from the GEC teamlt;/stronggt;lt;/pgt; lt;pgt;During the recent GEC baseline sharing events, one of the key messages that came through loud and clear from you was the value of meeting other projects and exchanging knowledge, sharing challenges, solutions, experiences and advice. We began to see the GEC community take root, and to continue this momentum we are launching the GEC forum amp;ndash; a place for the GEC Community of Practice to develop and grow. This will be the place for you share your expertise, participate in discussions, and interact with other projects that form the community of the Girlsamp;rsquo; Education Challenge. lt;a href=quot;;gt;Read;/agt;lt;/pgt; lt;pgt;amp;nbsp;lt;/pgt; nbsp; info: GEC welcome message (deliberately not in code) format: full_html/pre/div pSuch a block can be edited at /admin/structure/block/manage/block/3/configure. The path to edit a block is always at /admin/structure/block/manage/[Block ID]/configure./p pHopefully these tips will be useful the next time a completely unknown website is dropped in your lap./p

Acquia: PHP: Under the Hood, Running the Web

Tue, 12/09/2014 - 18:13
div class=field field-name-body field-type-text-with-summary field-label-hidden div class=field-items div property=content:encoded class=field-item evenp Most non-technical people out on the Web haven't heard of PHP before. They might not have even heard of many of the products that were built with this technology like Drupal, Magento, or WordPress. And together with other products built with PHP, these run about 83% of all internet web applications. The technology of PHP is very important to an enormous number of businesses, governments, and organisations around the world, so even though people might not be familiar with the language itself, there’s a very good chance they’ve used it online today. /p/div /div /div span property=dc:title content=PHP: Under the Hood, Running the Web class=rdf-meta element-hidden/span

Damien McKenna: Need help with (final?) release of Panels for Drupal 6

Tue, 12/09/2014 - 05:11
div class=field field-name-body field-type-text-with-summary field-label-hidden view-mode-teaserdiv class=field-itemsdiv class=field-item evenpAfter more than two and a half years since a href= last release/a, we need some help putting together what might be the final release of a href= for Drupal 6:/p/div/div/divsection class=field field-name-taxonomy-vocabulary-2 field-type-taxonomy-term-reference field-label-inline clearfix view-mode-teaserh2 class=field-labelTags:nbsp;/h2ul class=field-itemsli class=field-item evena href=/tags/drupalDrupal/a/lili class=field-item odda href=/tags/drupal-6Drupal 6/a/lili class=field-item evena href=/tags/drupal-planetDrupal Planet/a/lili class=field-item odda href=/tags/panelsPanels/a/li/ul/section

James Oakley: Installing the latest version of Drush

Tue, 12/09/2014 - 01:21
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpIn case you missed it, a href= has evolved recently./p pQuick primer for beginners follows. (Although, if you haven't heard of Drush, the chances are this post was not written with you in mind. I blog about many subjects, and there aren't many readers who are interested in all of them!)/p pDrush stands for Drupal shell - it's a very powerful shell environment for managing Drupal sites using the command-line shell. span class=read-morea href=/blog/2014/12/installing_the_latest_version_of_drush title= rel=nofollowstronghellip;nbsp;Read morespan class=element-invisible about Installing the latest version of Drush/span/strong/a/span/p/div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-abovediv class=field-labelBlog Category:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/blog/categories/drupal_planetDrupal Planet/a/div/div/div

Visitors Voice: Milestone reached regarding Search API for Drupal 8

Mon, 12/08/2014 - 21:55
For all of us who care about site search for Drupal, the maintainer Thomas Seidl has written a report about the current status of Search API for Drupal 8. The search crew#8217;s vision is not only to port Search API to Drupal 8, but also to remove all known limitations, making site search for Drupal [#8230;]

Appnovation Technologies: How to properly use PHP on Drupal views fields

Mon, 12/08/2014 - 19:58
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encoded pEvery once in a while, as a Drupal site builder you will come across this problem./p/div/div/divdiv class=field field-name-field-blog-header-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/blog/how-properly-use-php-drupal-views-fieldsimg typeof=foaf:Image src= width=680 height=200 alt= //a/div/div/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url= st_title=How to properly use PHP on Drupal views fields class=st_facebook/span span st_url= st_title=How to properly use PHP on Drupal views fields class=st_twitter/span span st_url= st_title=How to properly use PHP on Drupal views fields class=st_sharethis/span script type='text/javascript'var switchTo5x = false;/scriptscript type='text/javascript' src=''/scriptscript type='text/javascript'stLight.options({publisher:dr-75626d0b-d9b4-2fdb-6d29-1a20f61d683});/script/div/div

Nuvole: Atrium Folders for Open Atrium 2

Mon, 12/08/2014 - 19:19
div class=field field-name-field-blog-subtitle field-type-text-long field-label-inline clearfixdiv class=field-labelSubtitle:nbsp;/divdiv class=field-itemsdiv class=field-item evenNuvole#039;s files and documents management feature is now available for the latest version of Open Atrium/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpimg src= class=img-responsive //p pWe received many requests to make an updated version of our Atrium Folders feature available for the latest version of a href=http://openatrium.comOpen Atrium/a, the excellent Drupal-based solution for Intranets developed by Phase2./p pa href=http://oecd.orgOECD/a sponsored the development of the new version as an open source project, in order to add a file management functionality to the a href= Policy Platform/a site that it manages together with the a href= Bank/a. Atrium Folders for Open Atrium 2 is thus now available to everybody./p h2The usual features, a new way/h2 pOpen Atrium changed completely and so did Atrium Folders. There are many differences under the hood, with a complete code rewrite, but the familiar user experience is still there./p h3Uploading and downloading files/h3 pCreating folders and adding files to the folders is as easy as creating any other content in Open Atrium 2: it is enough to create Files sections. When you are viewing a folder, specific buttons allow to create subfolders, upload files and directly download any file./p h3Access management/h3 pThe access management works like for other nodes in Open Atrium. Access to the folder can be restricted for both viewing and editing separately, and it can be determined at a folder level./p h3Notifications/h3 pThe notification system of Open Atrium can also be used for folders. Users can be informed when new files are added, with the same interface used by other Open Atrium features./p h2And much more/h2 h3Media module support/h3 pThe files are attached with the a href= widget and it is thus possible to manage not only files, but everything Media supports, like for example YouTube videos or files attached to other content./p h3Multiple uploads, with drag and drop support/h3 pThe multi-upload feature of Open Atrium 2 can also be used with Folders to upload several files at the same time. Drag and drop uploads are supported too./p h3Download folder as ZIP file/h3 pThe download button for files exists also for folders and it allows to download a folder with its subfolders and all included files as a ZIP archive. This functionality is available as a submodule, bundled with Atrium Folders./p h3File and folder revisions/h3 pAtrium Folders supports history and revisions both for folders and files. You can view previous versions of a file and optionally restore an older version. This functionality is available as a submodule, bundled with Atrium Folders./p h2Download, installation and support/h2 pThe Open Atrium Folders feature can be downloaded and installed like any other module./p pIt is available on at a href= pPlease report any issues in the module's issue queue at /div/div/divdiv class=field field-name-field-blog-tags field-type-taxonomy-term-reference field-label-inline clearfixdiv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evenDrupal Planet/divdiv class=field-item oddOpen Atrium/div/div/div

Dries Buytaert: Announcing the Drupal 8 Accelerate Fund

Mon, 12/08/2014 - 19:01
div class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-abovediv class=field-labelTopic:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tag/drupal typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal/a/divdiv class=field-item odda href=/tag/drupal-association typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal Association/a/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpToday the a href=http://assoc.drupal.orgDrupal Association/a announced a new program: the a href= 8 Accelerate Fund/a. Drupal 8 Accelerate Fund is a $125,000 USD fund to help solve critical issues and accelerate the release of Drupal 8./p pThe Drupal Association is guaranteeing the funds and will try to raise more from individual members and organizations within the Drupal community. It is the Drupal 8 branch maintainers — Nathaniel Catchpole, Alex Pott, Angie Byron, and myself — who will decide on how the money is spent. The fund provides for both top-down (directed by the Drupal 8 branch maintainers) and bottom-up (requested by other community members) style grants. The money will be used on things that positively impact the Drupal 8 release date, such as hiring contributors to fix critical bugs, sponsoring code sprints to fix specific issues, and other community proposals./p pSince the a href= of the Drupal Association/a, I have encouraged the Drupal Association staff and Board of Directors to grow into our ambitious mission; to unite a global open source community to build and promote Drupal. I've also written and talked about the fact that a href= Open Source communities is really hard/a. The Drupal 8 Accelerate Fund is an experiment with crowdsourcing as a means to help scale our community which is unique compared to other efforts because it is backed by the official non-profit organization that fosters and supports Drupal./p pI feel that the establishment of this fund is an important step towards more sustainable core development. My hope is that if this round of funding is successful that this can grow over time to levels that could make an even more meaningful impact on core, particularly if we complement this with other approaches and steps, such as a href= credit on pThis is also an opportunity for Drupal companies to give back to Drupal 8 development. The Drupal Association board is challenging itself to raise $62,500 USD (half of the total amount) to support this program. If you are an organization who can help support this challenge, please let us know. If you're a community member with a great idea on how we might be able to spend this money to help accelerate Drupal 8, you can a href= for a grant/a today./p /div/div/div

Code Enigma: Meaningful commit messages

Mon, 12/08/2014 - 14:51
At Code Enigma, most of our Jenkins builds post a git log into one of our IRC channels on completion. This helps the ops team to keep an eye on what#039;s going on and to quickly spot any build failures. It also gives us a chance to see the commit messages that people are posting.

Annertech: Twitter Cards - Up Close and Drupally

Mon, 12/08/2014 - 11:12
span class=field field-node--title field-name-title field-type-string field-label-hiddenTwitter Cards - Up Close and Drupally/span div class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-itempWe've all heard of a href= target=_blankTwitter,/a how it can help you boost your business and engage with your supporters. But have you ever noticed that some tweets now come with a nice little description, or maybe an image, or even an embedded video?/p pThat's the magic of a href= target=_blankTwitter cards/a, and you can do it with Drupal./p/div /div /div

LevelTen Interactive: The Best Drupal Modules For Creating Engaging Blogs

Mon, 12/08/2014 - 08:00
img typeof=foaf:Image src= width=600 height=300 alt= / p class=rterightspan style=font-size: 16px; line-height: 24px; background-color: rgb(255, 255, 255);Featured Photo By /spana href= style=font-size: 16px; line-height: 24px; background-color: rgb(255, 255, 255);Markus Spiske/a... a href=/blog/brent-bice/best-drupal-modules-creating-engaging-blogs class=more-linkRead more/a/p