Skip to Content

Newsfeeds

Open Source Training: Filter Drupal Content Based on File Type

Planet Drupal - 9 December 2014 - 10:11am

One of our members asked an interesting question about Views.

They 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.

Here'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.

Categories: Drupal

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

Planet Drupal - 9 December 2014 - 9:46am

Travis-CI 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.

Compared 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.

You 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.

This 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.

And because of that there are many different .travis.yml 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…

As Easy as it Gets

I am proud to announce the drupal_ti project, which allows any module on drupal.org to easily leverage travis-ci.org for testing:

  • PHPUnit
  • SimpleTest
  • Behat

The process (which I will show in more detail below) is as simple as copying a generic .travis.yml.dist file as .travis.yml to your modules root, push your repository to Github, activate the repository at travis-ci.org and you are done.

Oh, and while you are at it, if you add a .coveralls.yml file, then code coverage is automatically reported to coveralls.io, too (for PHPUnit).

All the hard work of installing drupal, running a web server, setting up Selenium, etc. is done by drupal_ti.

So you don't have to copy some .travis.yml 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.

Features
  • Drupal 8 ready: drupal_ti supports both Drupal 7 and 8 modules. Use DRUPAL_TI_ENVIRONMENT="drupal-8" for your Drupal 8 modules.
  • Tested: drupal_ti tests its own code base for both Drupal 7 and Drupal 8 modules.
  • Modular architecture: 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.
  • Environment aware: drupal_ti has a file for each environment, which makes the code generic for both Drupal 7 and 8.
  • Examples provided: drupal_ti provides easy examples of the needed files in tests/drupal-{7,8}/drupal_ti_test. So you can get started easily!
  • Extensible: By specifying DRUPAL_TI_SCRIPT_DIR_BEFORE or DRUPAL_TI_SCRIPT_DIR_AFTER you can easily create your own runners and environment includes that run before or after the main runners. This could even come from composer.
  • Usable for non-travis CI: Because drupal-ti is just a command and because .travis.yml just has some environment vars, you can just copy the main declarations to some environment.sh file, set the TRAVIS_BUILD_DIR and use it locally, too.
An Example Conversion

My module registry_autoload uses simpletest on drupal.org to test its features. Now I want to test some advanced trait support, which needs PHP 5.4, so travis-ci.org is an option to do so.

Step 1 - Create the GitHub Repository and Push Your Code
  1. Sign in to github.com
  2. Click: + > New repository, enter: registry_autoload
  3. Click: Create repository

Copy the commands displayed by Github to push your code to GitHub. I like to use drupal.org as my upstream and GitHub as my origin remote:

$ git clone --branch 7.x-1.x Fabianx@git.drupal.org:project/registry_autoload.git $ cd registry_autoload $ git remote rename origin upstream $ git remote add origin git@github.com:LionsAd/registry_autoload.git $ git push -u origin 7.x-1.x Step 2 - Activate Travis-ci.org

Now head over to travis-ci.org:

  1. Choose "Sign in with GitHub" and follow instructions
  2. Click on your name at the top right, "Fabian Franz" for me
  3. Click: "Sync now" if you don't see the repository, yet
  4. Simply switch the toggle to "ON" for the project
  5. Click on the repository settings icon (the "tools icon")
  6. Toggle "Build only if .travis.yml is present"
  7. Click on "Build history"
  8. Leave the browser window open
Step 3 - Add drupal_ti .travis.yml

Now checkout a new branch, and add the .travis.yml file:

$ git checkout -b travis-integration $ curl https://raw.githubusercontent.com/LionsAd/drupal_ti/master/.travis.yml.dist -O $ mv .travis.yml.dist .travis.yml

Then, customize the following parts of the file:

# Configuration vars. - DRUPAL_TI_MODULE_NAME="registry_autoload" - DRUPAL_TI_SIMPLETEST_GROUP="Registry"

And:

matrix: # [[[ SELECT ANY OR MORE OPTIONS ]]] - DRUPAL_TI_RUNNERS="simpletest"

The simpletest group is returned from getInfo() in Drupal 7, but an annotation @group x in Drupal 8. Despite the name of the variable, you could also put in a class like RegistryAutoloadTestCase. 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.

Now add the file and push to GitHub:

$ git add .travis.yml $ git commit -m "Added travis integration" $ git push origin travis-integration Step 4 - Watch the Test Run

Now 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:

Click on PHP 5.4 and click the little button on the far right with "follow", to follow the output.

After a while the build is finished and all tests passed:

Congratulations, your project is now tested on travis-ci.org!

Now merge, the branch into your mainline and whenever you want to test a change on travis-ci.org just push a branch or make a pull request:

$ git checkout 7.x-1.x $ git merge travis-integration $ git push origin 7.x-1.x # Also push the changes back to drupal.org $ git push upstream 7.x-1.x

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 drupal.org are always in sync.

To be Continued…

In the next part of this series, I will explore how you can get started with unit testing locally and on travis-ci.org (using drupal_ti) and afterwards we will take a look at some easy behat setup.

If you are curious and want to start now, take a look at the run-* scripts in:

Enjoy and please leave me feedback either in the Drupal issue queue or on the GitHub project page.

About the Author

Fabian Franz is a Senior Performance Engineer and Technical Lead at Tag1
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.

Tags:  Testing Contributed modules Third-party tools Images: 
Categories: Drupal

Aten Design Group: Debugging New to You Drupal Blocks

Planet Drupal - 9 December 2014 - 8:20am

Let’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.

The first thing you should do is inspect that part of the page with your browser’s dev tools (e.g. Firefox, Chrome). Often IDs and class names will help identify the block.

Here’s an example of the DOM of a view block from the nodequeue module.

<div id="block-views-nodequeue-2-block" class="block block-views contextual-links-region block--marquee">

The 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.

Here’s a block defined in code:

<div id="block-cei-custom-blocks-cei-unicef-timeline" class="block block-cei-custom-blocks contextual-links-region">

In this case in cei_custom_blocks_block_info() defines a block delta: $blocks['cei_unicef_timeline'] The code that defines this block’s output will either be in cei_custom_blocks_block_view() or that function will call another.

In 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.

<div<?php print $attributes; ?>> <?php print $user_profile['images']['user_thumb']; ?> <?php print render($title_prefix); ?> <h3><?php print render($user_profile['name']); ?></h3> <?php print render($title_suffix); ?>   <div class="clearfix"></div> </div>

Once I found that, making the needed modification was simple.

To 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.

Blocks 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:

SELECT * FROM block_custom WHERE body LIKE "%participate in discussions%"\G

The query matched the following entry:

*************************** 1. row *************************** bid: 3 body: <p><strong>A message from the GEC team</strong></p> <p>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 &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 Girls&rsquo; Education Challenge. <a href="http://www.educationinnovations.org/forums/introducing-girls%E2%80%99-education-challenge-forum">Read more...</a></p> <p>&nbsp;</p>   info: GEC welcome message (deliberately not in code) format: full_html

Such 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.

Hopefully these tips will be useful the next time a completely unknown website is dropped in your lap.

Categories: Drupal

Acquia: PHP: Under the Hood, Running the Web

Planet Drupal - 9 December 2014 - 8:13am

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.

Categories: Drupal

Ingenico for Drupal Commerce

New Drupal Modules - 9 December 2014 - 6:22am

This module will soon replace Commerce Ogone, as the Ogone service was renamed to Ingenico Payment Services.

Categories: Drupal

Ingenico

New Drupal Modules - 9 December 2014 - 6:16am

This module will soon replace Ogone, as that service was renamed to Ingenico Payment Services.

Categories: Drupal

SWTOR dev demonstrates why F2P isn't always evil at GDC 2015

Social/Online Games - Gamasutra - 9 December 2014 - 6:06am

Damion Schubert, former lead on Star Wars: The Old Republic, will share lessons learned from the MMORPG's remarkably successful conversion from subscription-based to free-to-play during the F2P Summit at GDC 2015. ...

Categories: Game Theory & Design

How To Get Work Composing for Games - by Ian Stocker

Gamasutra.com Blogs - 9 December 2014 - 12:42am
Looking for work as a VGM composer? This is my condensed advice on how to break into the business, especially if you're out of personal contacts and have to resort to "cold emailing."
Categories: Game Theory & Design

GMing With Kids

Gnome Stew - 9 December 2014 - 12:00am

RPGs aren’t that different from playing pretend…

A couple weekends ago, I ran a game for my friends’ three daughters, ranging in age between 9 and 14. This was something I’d been meaning to do for a while, but with hectic schedules, it ended up taking longer to coordinate than I had hoped.

All three kids are bonafide nerds in their own right, but they only know of pen and paper RPGs by reputation. R, the oldest at almost 14, is hugely into the webcomic Homestuck and starting to experiment with cosplay. L, the eleven-year-old in the middle, is a diehard Star Wars fan that I wouldn’t go against in a trivia contest. She has even had to defend her right to be a girl that likes Star Wars to the kids at school. A, the youngest at nine, doesn’t really have a particular nerd niche of her own yet, but she likes the same things her sisters do and has had a quirky sense of humor since she was a toddler.

Before we could do anything, though, I had to determine which game I was going to run for them. I went back and forth on this for a while, debating the merits of various systems. I wanted something that had easy but solid mechanics, so they could get a taste for how RPGs work without getting overwhelmed with numbers and stats. I also wanted it to have a fun and not too complex story for them. Should I go for a simple super heroes game with the modified Marvel SAGA game I’ve run in the past? What about getting into a story using Doctor Who: Adventures in Time and Space, which I adore? Maybe Savage Worlds would be the best ‘simple’ system with whatever story I want to hang on it? There’s always Dungeon World, but doesn’t that require a bit of an advanced understanding of RPG concepts?

While debating this all, I came to the abrupt realization that I was overthinking it. If Dungeon & Dragons was good enough for their dad and I to dive into back in the 1980’s when we weren’t much older than they are now, why wouldn’t it be good enough for them? There’s quite a bit I like about 5th edition, which is miles away from the convoluted mess that 1st edition was when we were first getting into gaming. They’re smart kids and they’re all familiar with the basic concepts from having watched Lord of the Rings and the Hobbit movies. In addition to overthinking it, I was underestimating their abilities. D&D it was!

During character creation, the biggest obstacle was realizing how much of what we gamers consider ingrained concepts are not necessarily intuitive. It was fairly easy to explain the difference between class and race, but attributes were a bit more of an abstract concept for them. Skills were a particularly big challenge since they didn’t quite parse the way the attributes played into the various options. I was able to leave them to their own devices when it came to buying equipment, though. At one point, though, L looked at me and said, “Ang, I’m running out of money. Is there any way I can kill something right now to get more money?”

When they were done, we had a high elf rogue named Kibishi Nomi, a wood elf fighter named Matix Soren, and a dwarven wizard named Felthius Mailmor. Though they struggled a bit with some of the other parts of character creation, they quickly grasped figuring out background connections between the characters. Since Kibishi and Matix were both elves, they decided they grew up knowing one another, but they were never close friends. Felthius and Kibishi had both chosen the criminal background, so they determined they had a connection through the local thieves guild. The adventure hook had a relative asking for help, so Felthius’s cousin requested he (I didn’t have any female dwarf figures, so L made her character a male) get a group together to escort a wagon to a neighboring town. Without even batting an eye, they quickly determined that Felthius brought in Kibi who, in turn, brought in Matix. I’ve played with adult, experienced gamers who make that type of intro far more complicated than it need be. Leave it to some kids to make it easy.

As a side note, L did learn one of the unspoken rules of roleplaying games the hard way: Be careful what you name your character. While Felthius Mailmor is a good strong name for a dwarf when written  down, it was quickly twisted once spoke aloud. Sometimes he was Filthiest Mailman, and sometimes he was Fluffiest Mewmew. In retaliation, R’s rogue became Kiwi and A’s fighter was Mad-ox, but it was a last ditch effort to save some face with her sisters.

The game itself went smooth but slow. Again, there are standards we take for granted that newbies and kids may not necessarily be aware of. For example, when they were faced with a couple of different paths in the goblin caves they were sneaking into, their first instinct was to split up so they could save time. Knowing they’d get overwhelmed solo with the encounters down any of those paths, I gently pointed out that they had already had trouble with the goblins guarding the cave, so they might be better off sticking together for strength in numbers. I also kept having to remind them of what they needed to roll, but they had a good handle on strategy that had little to do with needing to understand game mechanics. With some successful stealth rolls and a well-placed sleep spell, they were able to defeat the big bad boss of the goblin clan.

All in all, the game was a success and a great experience. They reminded me of what it’s like to GM for those that are new to the hobby and how important it is to have patience and remember why we’re all there. The girls all had fun and they were immediately asking when we were going to play again. We ended on a cliffhanger, so they need to know what happens next.

Apparently A spent the next day trying to explain to her non-gaming mom about the game. She was very adamant that her mother understand the difference between class and race. Mom called me up later that day and jokingly lamented, “Yep, I knew it would happen. I’ve lost them. They’re gamers now.”



Categories: Game Theory & Design

The Culture Column: The Fox Court, Part 2

RPGNet - 9 December 2014 - 12:00am
An end to foxes and the Culture Column.
Categories: Game Theory & Design

Unity Couch Game Prototype Part 4 (Hauler) - by Brent Knowles

Gamasutra.com Blogs - 8 December 2014 - 11:59pm
This post examines the reasons behind a major design change I made in my Unity Prototype and how I used an old dice game to decide how that change should be implemented.
Categories: Game Theory & Design

Positive play: The benefits of video gaming - by Mark Griffiths

Gamasutra.com Blogs - 8 December 2014 - 10:23pm
There is a wealth of research showing that video games can have innovative educational and therapeutic uses, as well as many studies showing that playing video games can increase reaction times and increase hand-eye co-ordination. Find out more.
Categories: Game Theory & Design

The power of people who see the world in black and white - by Samuel Rantaeskola

Gamasutra.com Blogs - 8 December 2014 - 10:23pm
Some people are gifted with a perfect connection between their desires and their decision making. They know exactly what they like, and more importantly, what they don’t like. They are what I like to call a black and white person, there is no in between.
Categories: Game Theory & Design

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

Planet Drupal - 8 December 2014 - 7:11pm

After more than two and a half years since the last release, we need some help putting together what might be the final release of Panels for Drupal 6:

Tags: 
Categories: Drupal

James Oakley: Installing the latest version of Drush

Planet Drupal - 8 December 2014 - 3:21pm

In case you missed it, Drush has evolved recently.

Quick 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!)

Drush stands for Drupal shell - it's a very powerful shell environment for managing Drupal sites using the command-line shell. … Read more about Installing the latest version of Drush

Blog Category: Drupal Planet
Categories: Drupal

Status Watchdog Logger

New Drupal Modules - 8 December 2014 - 12:33pm

Status Watchdog logs system status messages (admin/reports/status) to the watchdog. This is especially useful when combined with syslog and external monitoring solutions such as Splunk.

Dependencies Installation

Simply turn on the module and watchdog messages will be logged during cron runs. By default, messages are logged once per hour and after a cache clear. This ensures that any changes in status after a deployment are immediately logged.

Categories: Drupal

Gift Exchange

New Drupal Modules - 8 December 2014 - 12:06pm

This will be a gift exchange system for groups. Yeah, that's right, a Secret Santa app.

(It's not working yet!)

Categories: Drupal

Visitors Voice: Milestone reached regarding Search API for Drupal 8

Planet Drupal - 8 December 2014 - 11:55am
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’s vision is not only to port Search API to Drupal 8, but also to remove all known limitations, making site search for Drupal […]
Categories: Drupal

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

Planet Drupal - 8 December 2014 - 9:58am

Every once in a while, as a Drupal site builder you will come across this problem.

var switchTo5x = false;stLight.options({"publisher":"dr-75626d0b-d9b4-2fdb-6d29-1a20f61d683"});
Categories: Drupal

Nuvole: Atrium Folders for Open Atrium 2

Planet Drupal - 8 December 2014 - 9:19am
Subtitle: Nuvole's files and documents management feature is now available for the latest version of Open Atrium

We received many requests to make an updated version of our Atrium Folders feature available for the latest version of Open Atrium, the excellent Drupal-based solution for Intranets developed by Phase2.

OECD sponsored the development of the new version as an open source project, in order to add a file management functionality to the Innovation Policy Platform site that it manages together with the World Bank. Atrium Folders for Open Atrium 2 is thus now available to everybody.

The usual features, a new way

Open 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.

Uploading and downloading files

Creating 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.

Access management

The 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.

Notifications

The 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.

And much more Media module support

The files are attached with the Media 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.

Multiple uploads, with drag and drop support

The 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.

Download folder as ZIP file

The 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.

File and folder revisions

Atrium 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.

Download, installation and support

The Open Atrium Folders feature can be downloaded and installed like any other module.

It is available on drupal.org at https://www.drupal.org/project/oa_folders/

Please report any issues in the module's issue queue at drupal.org

Tags: Drupal PlanetOpen Atrium
Categories: Drupal
Syndicate content


Google+
about seo