commit d756b39ae840913e47c3aa4ef8bddeb2e9932410
Author: Assos Assos <assos+forge@centrale-marseille.fr>
Date:   Wed Apr 27 22:50:30 2016 +0200

    Weekly update of contrib modules

diff --git a/drupal7/sites/all/modules/date_ical/date_ical.info b/drupal7/sites/all/modules/date_ical/date_ical.info
index 0d6f528a..27dae265 100644
--- a/drupal7/sites/all/modules/date_ical/date_ical.info
+++ b/drupal7/sites/all/modules/date_ical/date_ical.info
@@ -21,9 +21,9 @@ files[] = includes/date_ical_plugin_style_ical_feed.inc
 ; Includes for iCal feed import using Feeds
 files[] = includes/DateiCalFeedsParser.inc
 
-; Information added by Drupal.org packaging script on 2015-12-01
-version = "7.x-3.8"
+; Information added by Drupal.org packaging script on 2016-04-25
+version = "7.x-3.9"
 core = "7.x"
 project = "date_ical"
-datestamp = "1448995442"
+datestamp = "1461609737"
 
diff --git a/drupal7/sites/all/modules/date_ical/date_ical.module b/drupal7/sites/all/modules/date_ical/date_ical.module
index 8020fe1c..2e305d82 100644
--- a/drupal7/sites/all/modules/date_ical/date_ical.module
+++ b/drupal7/sites/all/modules/date_ical/date_ical.module
@@ -5,12 +5,6 @@
  * Adds ical functionality to Views, and an iCal parser to Feeds.
  */
 
-/**
- * The version number of the current release. This is inserted into the PRODID
- * value of the iCal feeds created by Date iCal, for debugging purposes.
- */
-define('DATE_ICAL_VERSION', '3.8');
-
 /**
  * Exception class for generic exceptions thrown by this module.
  */
@@ -260,17 +254,17 @@ function date_ical_sanitize_text($text = '') {
  *   Newer versions of Feeds send this value as an array containing the string.
  */
 function date_ical_feeds_set_rrule($source, $entity, $target, $repeat_rule) {
-  if (empty($repeat_rule)) {
-    // Don't alter the entity if there's no repeat rule.
-    return;
-  }
-
   if (is_array($repeat_rule)) {
     // Newer versions of Feeds return $repeat_rule as an array containing the
     // string we returned from ParseVcalendar::parseRepeatProperty().
     $repeat_rule = reset($repeat_rule);
   }
 
+  if (empty($repeat_rule)) {
+    // Don't alter the entity if there's no repeat rule.
+    return;
+  }
+
   // $target looks like <field_name>:rrule, but we only need <field_name>.
   $field_name = current(explode(':', $target, 2));
   // Parse the repeat rule into RRULE, RDATE, EXRULE, and EXDATE strings.
@@ -281,7 +275,7 @@ function date_ical_feeds_set_rrule($source, $entity, $target, $repeat_rule) {
 
   module_load_include('inc', 'date_ical', 'date_ical.utils');
   // This "loop" is really just to make sure we get the right array keys. It
-  // souldn't ever execute more than once.
+  // shouldn't ever execute more than once.
   foreach ($entity->{$field_name} as $lang => $date_values) {
     $values = _date_ical_get_repeat_dates($field_name, $repeat_data, $date_values[0], $source);
     foreach ($values as $key => $value) {
@@ -348,7 +342,9 @@ function _date_ical_get_location_fields($base = 'node') {
       'text_with_summary',
       'node_reference',
       'addressfield',
-      'location'
+      'location',
+      'node_reference',
+      'taxonomy_term_reference',
     );
     if (!$info || !in_array($info['type'], $supported_location_fields)) {
       continue;
diff --git a/drupal7/sites/all/modules/date_ical/includes/date_ical_plugin_row_ical_entity.inc b/drupal7/sites/all/modules/date_ical/includes/date_ical_plugin_row_ical_entity.inc
index 97b9b3ed..80f7559b 100644
--- a/drupal7/sites/all/modules/date_ical/includes/date_ical_plugin_row_ical_entity.inc
+++ b/drupal7/sites/all/modules/date_ical/includes/date_ical_plugin_row_ical_entity.inc
@@ -284,6 +284,24 @@ class date_ical_plugin_row_ical_entity extends views_plugin_row {
           }
           $location = implode(', ', $location_data);
         }
+        elseif ($location_info['type'] == 'node_reference') {
+        // Make sure this Node Reference actually references a node.
+          if ($location_field['nid']) {
+            $node = node_load($location_field['nid']);
+            $location = $node->title;
+          }
+        }
+        elseif ($location_info['type'] == 'taxonomy_term_reference') {
+          $terms = taxonomy_term_load_multiple(array_column($items,'tid'));
+          // Make sure that there are terms that were loaded.
+          if ($terms) {
+            $term_names = array();
+            foreach ($terms as $term) {
+              $term_names[] = $term->name;
+            }
+            $location = implode(', ', $term_names);
+          }
+        }
         else {
           $location = $location_field['value'];
         }
@@ -314,7 +332,7 @@ class date_ical_plugin_row_ical_entity extends views_plugin_row {
           }
         }
         elseif ($summary_info['type'] == 'taxonomy_term_reference') {
-          $terms = taxonomy_term_load_multiple($items);
+          $terms = taxonomy_term_load_multiple(array_column($items,'tid'));
           // Make sure that there are terms that were loaded.
           if ($terms) {
             $term_names = array();
diff --git a/drupal7/sites/all/modules/date_ical/includes/date_ical_plugin_style_ical_feed.inc b/drupal7/sites/all/modules/date_ical/includes/date_ical_plugin_style_ical_feed.inc
index 374fb6ae..0be0bf8f 100644
--- a/drupal7/sites/all/modules/date_ical/includes/date_ical_plugin_style_ical_feed.inc
+++ b/drupal7/sites/all/modules/date_ical/includes/date_ical_plugin_style_ical_feed.inc
@@ -157,7 +157,7 @@ class date_ical_plugin_style_ical_feed extends views_plugin_style {
     }
     else {
       // Create a vcalendar object using the iCalcreator library.
-      $config = array('unique_id' => 'Date iCal v' . DATE_ICAL_VERSION);
+      $config = array('unique_id' => 'Date iCal');
       $vcalendar = new vcalendar($config);
       $vcalendar->setMethod('PUBLISH');
 
diff --git a/drupal7/sites/all/modules/date_ical/libraries/ParserVcalendar.inc b/drupal7/sites/all/modules/date_ical/libraries/ParserVcalendar.inc
index 30ddebd5..103aa840 100644
--- a/drupal7/sites/all/modules/date_ical/libraries/ParserVcalendar.inc
+++ b/drupal7/sites/all/modules/date_ical/libraries/ParserVcalendar.inc
@@ -224,6 +224,12 @@ class ParserVcalendar {
       unset($vcalendar_component->propix[$property_key]);
     }
 
+    if (is_array($text) && isset($vcalendar_component->xprop[$property_key])) {
+      # This is an X-PROPERTY, which iCalcreator returns as an array like array('X-PROP-NAME', value).
+      # We only care about the value, though.
+      $text = $text[1];
+    }
+
     if ($text === FALSE) {
       if ($property_key != 'SUMMARY') {
         return NULL;
@@ -472,7 +478,7 @@ class ParserVcalendar {
         $msg = "The event with UID %uid has an indefinitely repeating RRULE, which the Date Repeat module doesn't support.
           As a workaround, Date iCal set the repeat count to @count. This value can be customized in the iCal parser settings.";
         watchdog('date_ical', $msg, array('%uid' => $uid, '@count' => $count), WATCHDOG_WARNING);
-        if ($this->config['indefinite_message_display']) {
+        if (!empty($this->config['indefinite_message_display'])) {
           drupal_set_message(
             t("At least one of the events in this iCal feed has an indefinitely repeating RRULE, which the Date Repeat module doesn't support.<br>
               As a workaround, Date iCal set the repeat count to @count. This value can be customized in the iCal parser settings.",
@@ -481,14 +487,25 @@ class ParserVcalendar {
             FALSE
           );
         }
-        $rrule_data['value']['COUNT'] = $this->config['indefinite_count'];
+        if (isset($this->config['indefinite_count'])) {
+          $rrule_data['value']['COUNT'] = $this->config['indefinite_count'];
+        }
+        else {
+          // Somehow, it's possible for the config values to have no setting, even though we've given them a default.
+          // So make really sure we set the COUNT to *something*.
+          $rrule_data['value']['COUNT'] = 52;
+        }
       }
     }
 
-    $rrule = trim($vcalendar_component->createRrule());
-    $rdate = trim($vcalendar_component->createRdate());
-    $exrule = trim($vcalendar_component->createExrule());
-    $exdate = trim($vcalendar_component->createExdate());
+    # Due to a bug in iCalcreator 2.20.2, any repeat property that's too long to fit on one line will be returned
+    # verbatim, including the endline and the single-space indentation that starts the second line. Thus, we need to
+    # remove those things ourselves.
+    $rrule = trim(preg_replace('/\s/', '', $vcalendar_component->createRrule()));
+    $rdate = trim(preg_replace('/\s/', '', $vcalendar_component->createRdate()));
+    $exrule = trim(preg_replace('/\s/', '', $vcalendar_component->createExrule()));
+    $exdate = trim(preg_replace('/\s/', '', $vcalendar_component->createExdate()));
+
     return "$rrule|$rdate|$exrule|$exdate";
   }
 
diff --git a/drupal7/sites/all/modules/date_ical/libraries/windowsZones.json b/drupal7/sites/all/modules/date_ical/libraries/windowsZones.json
index 9a9d3479..ac44cf0b 100644
--- a/drupal7/sites/all/modules/date_ical/libraries/windowsZones.json
+++ b/drupal7/sites/all/modules/date_ical/libraries/windowsZones.json
@@ -5,7 +5,7 @@
       "_number": "$Revision: 9178 $"
     },
     "generation": {
-      "_date": "$Date: 2013-08-08 13:59:22 -0500 (Thu, 08 Aug 2013) $"
+      "_date": "$Date: 2016-03-16 13:59:22 -0500 (Wed, 16 Mar 2016) $"
     },
     "windowsZones": {
       "mapTimezones": [
@@ -158,7 +158,7 @@
         },
         {
           "mapZone": {
-            "_other": "Greenwich Standard Time",
+            "_other": "Morocco Standard Time",
             "_territory": "EH",
             "_type": "Africa/El_Aaiun"
           }
@@ -426,7 +426,7 @@
           "mapZone": {
             "_other": "Alaskan Standard Time",
             "_territory": "US",
-            "_type": "America/Anchorage America/Juneau America/Nome America/Sitka America/Yakutat"
+            "_type": "America/Anchorage America/Juneau America/Metlakatla America/Nome America/Sitka America/Yakutat"
           }
         },
         {
@@ -527,6 +527,20 @@
             "_type": "America/Buenos_Aires America/Argentina/La_Rioja America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Catamarca America/Cordoba America/Jujuy America/Mendoza"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Eastern Standard Time (Mexico)",
+            "_territory": "001",
+            "_type": "America/Cancun"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "Eastern Standard Time (Mexico)",
+            "_territory": "MX",
+            "_type": "America/Cancun"
+          }
+        },
         {
           "mapZone": {
             "_other": "Venezuela Standard Time",
@@ -636,7 +650,7 @@
           "mapZone": {
             "_other": "US Mountain Standard Time",
             "_territory": "CA",
-            "_type": "America/Dawson_Creek America/Creston"
+            "_type": "America/Dawson_Creek America/Creston America/Fort_Nelson"
           }
         },
         {
@@ -650,7 +664,7 @@
           "mapZone": {
             "_other": "Mountain Standard Time",
             "_territory": "US",
-            "_type": "America/Denver America/Boise America/Shiprock"
+            "_type": "America/Denver America/Boise"
           }
         },
         {
@@ -678,7 +692,7 @@
           "mapZone": {
             "_other": "SA Eastern Standard Time",
             "_territory": "BR",
-            "_type": "America/Fortaleza America/Belem America/Maceio America/Recife America/Santarem"
+            "_type": "America/Fortaleza America/Araguaina America/Belem America/Maceio America/Recife America/Santarem"
           }
         },
         {
@@ -697,7 +711,7 @@
         },
         {
           "mapZone": {
-            "_other": "Eastern Standard Time",
+            "_other": "SA Western Standard Time",
             "_territory": "TC",
             "_type": "America/Grand_Turk"
           }
@@ -853,7 +867,7 @@
           "mapZone": {
             "_other": "SA Western Standard Time",
             "_territory": "BR",
-            "_type": "America/Manaus America/Boa_Vista America/Eirunepe America/Porto_Velho America/Rio_Branco"
+            "_type": "America/Manaus America/Boa_Vista America/Porto_Velho"
           }
         },
         {
@@ -888,7 +902,7 @@
           "mapZone": {
             "_other": "Central Standard Time (Mexico)",
             "_territory": "MX",
-            "_type": "America/Mexico_City America/Bahia_Banderas America/Cancun America/Merida America/Monterrey"
+            "_type": "America/Mexico_City America/Bahia_Banderas America/Merida America/Monterrey"
           }
         },
         {
@@ -977,16 +991,16 @@
         },
         {
           "mapZone": {
-            "_other": "SA Western Standard Time",
-            "_territory": "TT",
-            "_type": "America/Port_of_Spain"
+            "_other": "Eastern Standard Time",
+            "_territory": "HT",
+            "_type": "America/Port-au-Prince"
           }
         },
         {
           "mapZone": {
-            "_other": "Eastern Standard Time",
-            "_territory": "HT",
-            "_type": "America/Port-au-Prince"
+            "_other": "SA Western Standard Time",
+            "_territory": "TT",
+            "_type": "America/Port_of_Spain"
           }
         },
         {
@@ -1012,16 +1026,9 @@
         },
         {
           "mapZone": {
-            "_other": "Pacific Standard Time (Mexico)",
-            "_territory": "001",
-            "_type": "America/Santa_Isabel"
-          }
-        },
-        {
-          "mapZone": {
-            "_other": "Pacific Standard Time (Mexico)",
-            "_territory": "MX",
-            "_type": "America/Santa_Isabel"
+            "_other": "SA Pacific Standard Time",
+            "_territory": "BR",
+            "_type": "America/Rio_Branco America/Eirunepe"
           }
         },
         {
@@ -1056,7 +1063,7 @@
           "mapZone": {
             "_other": "E. South America Standard Time",
             "_territory": "BR",
-            "_type": "America/Sao_Paulo America/Araguaina"
+            "_type": "America/Sao_Paulo"
           }
         },
         {
@@ -1133,7 +1140,7 @@
           "mapZone": {
             "_other": "Pacific Standard Time",
             "_territory": "MX",
-            "_type": "America/Tijuana"
+            "_type": "America/Tijuana America/Santa_Isabel"
           }
         },
         {
@@ -1201,23 +1208,23 @@
         },
         {
           "mapZone": {
-            "_other": "Pacific SA Standard Time",
+            "_other": "New Zealand Standard Time",
             "_territory": "AQ",
-            "_type": "Antarctica/Palmer"
+            "_type": "Antarctica/McMurdo"
           }
         },
         {
           "mapZone": {
-            "_other": "SA Eastern Standard Time",
+            "_other": "Pacific SA Standard Time",
             "_territory": "AQ",
-            "_type": "Antarctica/Rothera"
+            "_type": "Antarctica/Palmer"
           }
         },
         {
           "mapZone": {
-            "_other": "New Zealand Standard Time",
+            "_other": "SA Eastern Standard Time",
             "_territory": "AQ",
-            "_type": "Antarctica/South_Pole Antarctica/McMurdo"
+            "_type": "Antarctica/Rothera"
           }
         },
         {
@@ -1451,13 +1458,6 @@
             "_type": "Asia/Hong_Kong"
           }
         },
-        {
-          "mapZone": {
-            "_other": "SE Asia Standard Time",
-            "_territory": "MN",
-            "_type": "Asia/Hovd"
-          }
-        },
         {
           "mapZone": {
             "_other": "North Asia East Standard Time",
@@ -1514,6 +1514,20 @@
             "_type": "Asia/Kabul"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Russia Time Zone 11",
+            "_territory": "001",
+            "_type": "Asia/Kamchatka"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "Russia Time Zone 11",
+            "_territory": "RU",
+            "_type": "Asia/Kamchatka Asia/Anadyr"
+          }
+        },
         {
           "mapZone": {
             "_other": "Pakistan Standard Time",
@@ -1553,7 +1567,7 @@
           "mapZone": {
             "_other": "North Asia Standard Time",
             "_territory": "RU",
-            "_type": "Asia/Krasnoyarsk"
+            "_type": "Asia/Krasnoyarsk Asia/Novokuznetsk"
           }
         },
         {
@@ -1588,7 +1602,7 @@
           "mapZone": {
             "_other": "Magadan Standard Time",
             "_territory": "RU",
-            "_type": "Asia/Magadan Asia/Anadyr Asia/Kamchatka"
+            "_type": "Asia/Magadan"
           }
         },
         {
@@ -1614,14 +1628,7 @@
         },
         {
           "mapZone": {
-            "_other": "E. Europe Standard Time",
-            "_territory": "001",
-            "_type": "Asia/Nicosia"
-          }
-        },
-        {
-          "mapZone": {
-            "_other": "E. Europe Standard Time",
+            "_other": "GTB Standard Time",
             "_territory": "CY",
             "_type": "Asia/Nicosia"
           }
@@ -1637,7 +1644,7 @@
           "mapZone": {
             "_other": "N. Central Asia Standard Time",
             "_territory": "RU",
-            "_type": "Asia/Novosibirsk Asia/Novokuznetsk Asia/Omsk"
+            "_type": "Asia/Novosibirsk Asia/Omsk"
           }
         },
         {
@@ -1656,7 +1663,14 @@
         },
         {
           "mapZone": {
-            "_other": "Korea Standard Time",
+            "_other": "North Korea Standard Time",
+            "_territory": "001",
+            "_type": "Asia/Pyongyang"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "North Korea Standard Time",
             "_territory": "KP",
             "_type": "Asia/Pyongyang"
           }
@@ -1728,7 +1742,7 @@
           "mapZone": {
             "_other": "China Standard Time",
             "_territory": "CN",
-            "_type": "Asia/Shanghai Asia/Chongqing Asia/Harbin Asia/Kashgar Asia/Urumqi"
+            "_type": "Asia/Shanghai"
           }
         },
         {
@@ -1745,6 +1759,20 @@
             "_type": "Asia/Singapore"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Russia Time Zone 10",
+            "_territory": "001",
+            "_type": "Asia/Srednekolymsk"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "Russia Time Zone 10",
+            "_territory": "RU",
+            "_type": "Asia/Srednekolymsk"
+          }
+        },
         {
           "mapZone": {
             "_other": "Taipei Standard Time",
@@ -1836,6 +1864,13 @@
             "_type": "Asia/Ulaanbaatar Asia/Choibalsan"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Central Asia Standard Time",
+            "_territory": "CN",
+            "_type": "Asia/Urumqi"
+          }
+        },
         {
           "mapZone": {
             "_other": "SE Asia Standard Time",
@@ -1868,7 +1903,7 @@
           "mapZone": {
             "_other": "Yakutsk Standard Time",
             "_territory": "RU",
-            "_type": "Asia/Yakutsk Asia/Khandyga"
+            "_type": "Asia/Yakutsk Asia/Chita Asia/Khandyga"
           }
         },
         {
@@ -2097,191 +2132,198 @@
         },
         {
           "mapZone": {
-            "_other": "W. Central Africa Standard Time",
+            "_other": "Cape Verde Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-1"
+            "_type": "Etc/GMT+1"
           }
         },
         {
           "mapZone": {
-            "_other": "South Africa Standard Time",
+            "_other": "Hawaiian Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-2"
+            "_type": "Etc/GMT+10"
           }
         },
         {
           "mapZone": {
-            "_other": "E. Africa Standard Time",
-            "_territory": "ZZ",
-            "_type": "Etc/GMT-3"
+            "_other": "UTC-11",
+            "_territory": "001",
+            "_type": "Etc/GMT+11"
           }
         },
         {
           "mapZone": {
-            "_other": "Arabian Standard Time",
+            "_other": "UTC-11",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-4"
+            "_type": "Etc/GMT+11"
           }
         },
         {
           "mapZone": {
-            "_other": "West Asia Standard Time",
-            "_territory": "ZZ",
-            "_type": "Etc/GMT-5"
+            "_other": "Dateline Standard Time",
+            "_territory": "001",
+            "_type": "Etc/GMT+12"
           }
         },
         {
           "mapZone": {
-            "_other": "Central Asia Standard Time",
+            "_other": "Dateline Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-6"
+            "_type": "Etc/GMT+12"
           }
         },
         {
           "mapZone": {
-            "_other": "SE Asia Standard Time",
+            "_other": "UTC-02",
+            "_territory": "001",
+            "_type": "Etc/GMT+2"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "UTC-02",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-7"
+            "_type": "Etc/GMT+2"
           }
         },
         {
           "mapZone": {
-            "_other": "Singapore Standard Time",
+            "_other": "SA Eastern Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-8"
+            "_type": "Etc/GMT+3"
           }
         },
         {
           "mapZone": {
-            "_other": "Tokyo Standard Time",
+            "_other": "SA Western Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-9"
+            "_type": "Etc/GMT+4"
           }
         },
         {
           "mapZone": {
-            "_other": "West Pacific Standard Time",
+            "_other": "SA Pacific Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-10"
+            "_type": "Etc/GMT+5"
           }
         },
         {
           "mapZone": {
-            "_other": "Central Pacific Standard Time",
+            "_other": "Central America Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-11"
+            "_type": "Etc/GMT+6"
           }
         },
         {
           "mapZone": {
-            "_other": "UTC+12",
-            "_territory": "001",
-            "_type": "Etc/GMT-12"
+            "_other": "US Mountain Standard Time",
+            "_territory": "ZZ",
+            "_type": "Etc/GMT+7"
           }
         },
         {
           "mapZone": {
-            "_other": "UTC+12",
+            "_other": "W. Central Africa Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-12"
+            "_type": "Etc/GMT-1"
           }
         },
         {
           "mapZone": {
-            "_other": "Tonga Standard Time",
+            "_other": "West Pacific Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT-13"
+            "_type": "Etc/GMT-10"
           }
         },
         {
           "mapZone": {
-            "_other": "Cape Verde Standard Time",
+            "_other": "Central Pacific Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+1"
+            "_type": "Etc/GMT-11"
           }
         },
         {
           "mapZone": {
-            "_other": "UTC-02",
+            "_other": "UTC+12",
             "_territory": "001",
-            "_type": "Etc/GMT+2"
+            "_type": "Etc/GMT-12"
           }
         },
         {
           "mapZone": {
-            "_other": "UTC-02",
+            "_other": "UTC+12",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+2"
+            "_type": "Etc/GMT-12"
           }
         },
         {
           "mapZone": {
-            "_other": "SA Eastern Standard Time",
+            "_other": "Tonga Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+3"
+            "_type": "Etc/GMT-13"
           }
         },
         {
           "mapZone": {
-            "_other": "SA Western Standard Time",
+            "_other": "Line Islands Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+4"
+            "_type": "Etc/GMT-14"
           }
         },
         {
           "mapZone": {
-            "_other": "SA Pacific Standard Time",
+            "_other": "South Africa Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+5"
+            "_type": "Etc/GMT-2"
           }
         },
         {
           "mapZone": {
-            "_other": "Central America Standard Time",
+            "_other": "E. Africa Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+6"
+            "_type": "Etc/GMT-3"
           }
         },
         {
           "mapZone": {
-            "_other": "US Mountain Standard Time",
+            "_other": "Arabian Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+7"
+            "_type": "Etc/GMT-4"
           }
         },
         {
           "mapZone": {
-            "_other": "Hawaiian Standard Time",
+            "_other": "West Asia Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+10"
+            "_type": "Etc/GMT-5"
           }
         },
         {
           "mapZone": {
-            "_other": "UTC-11",
-            "_territory": "001",
-            "_type": "Etc/GMT+11"
+            "_other": "Central Asia Standard Time",
+            "_territory": "ZZ",
+            "_type": "Etc/GMT-6"
           }
         },
         {
           "mapZone": {
-            "_other": "UTC-11",
+            "_other": "SE Asia Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+11"
+            "_type": "Etc/GMT-7"
           }
         },
         {
           "mapZone": {
-            "_other": "Dateline Standard Time",
-            "_territory": "001",
-            "_type": "Etc/GMT+12"
+            "_other": "Singapore Standard Time",
+            "_territory": "ZZ",
+            "_type": "Etc/GMT-8"
           }
         },
         {
           "mapZone": {
-            "_other": "Dateline Standard Time",
+            "_other": "Tokyo Standard Time",
             "_territory": "ZZ",
-            "_type": "Etc/GMT+12"
+            "_type": "Etc/GMT-9"
           }
         },
         {
@@ -2370,7 +2412,14 @@
         },
         {
           "mapZone": {
-            "_other": "GTB Standard Time",
+            "_other": "E. Europe Standard Time",
+            "_territory": "001",
+            "_type": "Europe/Chisinau"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "E. Europe Standard Time",
             "_territory": "MD",
             "_type": "Europe/Chisinau"
           }
@@ -2463,7 +2512,7 @@
           "mapZone": {
             "_other": "FLE Standard Time",
             "_territory": "UA",
-            "_type": "Europe/Kiev Europe/Simferopol Europe/Uzhgorod Europe/Zaporozhye"
+            "_type": "Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye"
           }
         },
         {
@@ -2524,7 +2573,14 @@
         },
         {
           "mapZone": {
-            "_other": "Kaliningrad Standard Time",
+            "_other": "Belarus Standard Time",
+            "_territory": "001",
+            "_type": "Europe/Minsk"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "Belarus Standard Time",
             "_territory": "BY",
             "_type": "Europe/Minsk"
           }
@@ -2547,7 +2603,7 @@
           "mapZone": {
             "_other": "Russian Standard Time",
             "_territory": "RU",
-            "_type": "Europe/Moscow Europe/Samara Europe/Volgograd"
+            "_type": "Europe/Moscow Europe/Simferopol Europe/Volgograd"
           }
         },
         {
@@ -2599,6 +2655,20 @@
             "_type": "Europe/Rome"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Russia Time Zone 3",
+            "_territory": "001",
+            "_type": "Europe/Samara"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "Russia Time Zone 3",
+            "_territory": "RU",
+            "_type": "Europe/Samara"
+          }
+        },
         {
           "mapZone": {
             "_other": "W. Europe Standard Time",
@@ -2795,6 +2865,13 @@
             "_type": "MST7MDT"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Pacific Standard Time",
+            "_territory": "ZZ",
+            "_type": "PST8PDT"
+          }
+        },
         {
           "mapZone": {
             "_other": "Samoa Standard Time",
@@ -2823,6 +2900,20 @@
             "_type": "Pacific/Auckland"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Central Pacific Standard Time",
+            "_territory": "PG",
+            "_type": "Pacific/Bougainville"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "SA Pacific Standard Time",
+            "_territory": "CL",
+            "_type": "Pacific/Easter"
+          }
+        },
         {
           "mapZone": {
             "_other": "Central Pacific Standard Time",
@@ -2914,6 +3005,20 @@
             "_type": "Pacific/Johnston"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Line Islands Standard Time",
+            "_territory": "001",
+            "_type": "Pacific/Kiritimati"
+          }
+        },
+        {
+          "mapZone": {
+            "_other": "Line Islands Standard Time",
+            "_territory": "KI",
+            "_type": "Pacific/Kiritimati"
+          }
+        },
         {
           "mapZone": {
             "_other": "UTC+12",
@@ -2942,6 +3047,13 @@
             "_type": "Pacific/Niue"
           }
         },
+        {
+          "mapZone": {
+            "_other": "Central Pacific Standard Time",
+            "_territory": "NF",
+            "_type": "Pacific/Norfolk"
+          }
+        },
         {
           "mapZone": {
             "_other": "Central Pacific Standard Time",
@@ -3046,13 +3158,6 @@
             "_territory": "WF",
             "_type": "Pacific/Wallis"
           }
-        },
-        {
-          "mapZone": {
-            "_other": "Pacific Standard Time",
-            "_territory": "ZZ",
-            "_type": "PST8PDT"
-          }
         }
       ]
     }
diff --git a/drupal7/sites/all/modules/ds/ds.info b/drupal7/sites/all/modules/ds/ds.info
index 8ad3bfda..cf0e73d0 100644
--- a/drupal7/sites/all/modules/ds/ds.info
+++ b/drupal7/sites/all/modules/ds/ds.info
@@ -13,9 +13,9 @@ files[] = tests/ds.views.test
 files[] = tests/ds.forms.test
 configure = admin/structure/ds
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/ds/modules/ds_devel/ds_devel.info b/drupal7/sites/all/modules/ds/modules/ds_devel/ds_devel.info
index 7b59e714..dcb6cb05 100644
--- a/drupal7/sites/all/modules/ds/modules/ds_devel/ds_devel.info
+++ b/drupal7/sites/all/modules/ds/modules/ds_devel/ds_devel.info
@@ -5,9 +5,9 @@ package = "Display Suite"
 dependencies[] = ds
 dependencies[] = devel
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/ds/modules/ds_extras/ds_extras.info b/drupal7/sites/all/modules/ds/modules/ds_extras/ds_extras.info
index 94f87778..aa2af95c 100644
--- a/drupal7/sites/all/modules/ds/modules/ds_extras/ds_extras.info
+++ b/drupal7/sites/all/modules/ds/modules/ds_extras/ds_extras.info
@@ -5,9 +5,9 @@ package = "Display Suite"
 dependencies[] = ds
 configure = admin/structure/ds/list/extras
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/ds/modules/ds_format/ds_format.info b/drupal7/sites/all/modules/ds/modules/ds_format/ds_format.info
index 05900077..949067b5 100644
--- a/drupal7/sites/all/modules/ds/modules/ds_format/ds_format.info
+++ b/drupal7/sites/all/modules/ds/modules/ds_format/ds_format.info
@@ -5,9 +5,9 @@ package = "Display Suite"
 dependencies[] = ds
 configure = admin/structure/ds/list/extras
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/ds/modules/ds_forms/ds_forms.info b/drupal7/sites/all/modules/ds/modules/ds_forms/ds_forms.info
index daa25617..2153a1c6 100644
--- a/drupal7/sites/all/modules/ds/modules/ds_forms/ds_forms.info
+++ b/drupal7/sites/all/modules/ds/modules/ds_forms/ds_forms.info
@@ -4,9 +4,9 @@ core = "7.x"
 package = "Display Suite"
 dependencies[] = ds
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/ds/modules/ds_search/ds_search.info b/drupal7/sites/all/modules/ds/modules/ds_search/ds_search.info
index 788c4b4b..ed7141af 100644
--- a/drupal7/sites/all/modules/ds/modules/ds_search/ds_search.info
+++ b/drupal7/sites/all/modules/ds/modules/ds_search/ds_search.info
@@ -5,9 +5,9 @@ package = "Display Suite"
 dependencies[] = ds
 configure = admin/structure/ds/list/search
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/ds/modules/ds_ui/ds_ui.info b/drupal7/sites/all/modules/ds/modules/ds_ui/ds_ui.info
index 73988402..9883a530 100644
--- a/drupal7/sites/all/modules/ds/modules/ds_ui/ds_ui.info
+++ b/drupal7/sites/all/modules/ds/modules/ds_ui/ds_ui.info
@@ -4,9 +4,9 @@ core = "7.x"
 package = "Display Suite"
 dependencies[] = ds
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/ds/tests/ds_exportables_test/ds_exportables_test.info b/drupal7/sites/all/modules/ds/tests/ds_exportables_test/ds_exportables_test.info
index 20dca2f4..a0c8b42b 100644
--- a/drupal7/sites/all/modules/ds/tests/ds_exportables_test/ds_exportables_test.info
+++ b/drupal7/sites/all/modules/ds/tests/ds_exportables_test/ds_exportables_test.info
@@ -4,9 +4,9 @@ package = "Display Suite"
 core = 7.x
 hidden = TRUE
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/ds/tests/ds_test.info b/drupal7/sites/all/modules/ds/tests/ds_test.info
index 79b345f4..813346a7 100644
--- a/drupal7/sites/all/modules/ds/tests/ds_test.info
+++ b/drupal7/sites/all/modules/ds/tests/ds_test.info
@@ -5,9 +5,9 @@ package = "Display Suite"
 dependencies[] = ds_extras
 hidden = TRUE
 
-; Information added by Drupal.org packaging script on 2016-02-11
-version = "7.x-2.13"
+; Information added by Drupal.org packaging script on 2016-04-26
+version = "7.x-2.14"
 core = "7.x"
 project = "ds"
-datestamp = "1455211441"
+datestamp = "1461696967"
 
diff --git a/drupal7/sites/all/modules/fivestar/fivestar.info b/drupal7/sites/all/modules/fivestar/fivestar.info
index e90069eb..613b9cdd 100644
--- a/drupal7/sites/all/modules/fivestar/fivestar.info
+++ b/drupal7/sites/all/modules/fivestar/fivestar.info
@@ -4,12 +4,13 @@ package = Voting
 core = 7.x
 dependencies[] = votingapi
 configure = admin/config/content/fivestar
+files[] = fivestar.migrate.inc
 files[] = test/fivestar.base.test
 files[] = test/fivestar.field.test
 
-; Information added by Drupal.org packaging script on 2014-03-17
-version = "7.x-2.1"
+; Information added by Drupal.org packaging script on 2016-04-23
+version = "7.x-2.2"
 core = "7.x"
 project = "fivestar"
-datestamp = "1395087839"
+datestamp = "1461406444"
 
diff --git a/drupal7/sites/all/modules/fivestar/includes/fivestar.migrate.inc b/drupal7/sites/all/modules/fivestar/fivestar.migrate.inc
similarity index 100%
rename from drupal7/sites/all/modules/fivestar/includes/fivestar.migrate.inc
rename to drupal7/sites/all/modules/fivestar/fivestar.migrate.inc
diff --git a/drupal7/sites/all/modules/fivestar/fivestar.module b/drupal7/sites/all/modules/fivestar/fivestar.module
index 88b6cdac..ced9c730 100644
--- a/drupal7/sites/all/modules/fivestar/fivestar.module
+++ b/drupal7/sites/all/modules/fivestar/fivestar.module
@@ -69,7 +69,7 @@ function fivestar_microdata_suggestions() {
 function fivestar_permission() {
   return array(
     'rate content' => array(
-      'title' => t('rate content'),
+      'title' => t('Use Fivestar to rate content'),
     ),
   );
 }
@@ -350,19 +350,18 @@ function fivestar_fivestar_access($entity_type, $id, $tag, $uid) {
  * suggestion by ChristianAdamski in issue 1289832-3.
  */
 function fivestar_form_comment_form_alter(&$form, &$form_state, $form_id) {
-  $is_fivestar = FALSE;
+  $fivestar_field_keys = array();
   if (isset($form['comment_output_below'])) {
     foreach($form['comment_output_below'] as $key => $value) {
-      if (is_array($value) && !empty($value['#field_type'])) {
-        if ($value['#field_type'] =='fivestar') {
-          $is_fivestar = TRUE;
-          $fivestar_key = $key;
-        }
+      if (is_array($value) && !empty($value['#field_type']) && $value['#field_type'] == 'fivestar') {
+        $fivestar_field_keys[] = $key;
       }
     }
   }
-  if ($is_fivestar) {
-    unset($form['comment_output_below'][$fivestar_key]);
+  if ($fivestar_field_keys) {
+    foreach ($fivestar_field_keys as $key) {
+      unset($form['comment_output_below'][$key]);
+    }
   }
 }
 
@@ -440,15 +439,35 @@ function fivestar_custom_widget($form, &$form_state, $values, $settings) {
 
   $form_state['settings'] = $settings;
 
+  // Define default settings.
+  $default_settings = array(
+    'allow_clear' => FALSE,
+    // Taken from installation file.
+    'allow_ownvote' => TRUE,
+    'allow_revote' => TRUE,
+    'autosubmit' => TRUE,
+    'description' => '',
+    'required' => FALSE,
+    'stars' => 5,
+    'tag' => 'vote',
+    'widget' => array(
+      'name' => 'default',
+      'css' => 'default',
+    ),
+  );
+
+  // Merge default settings.
+  $settings = $settings + $default_settings;
+
   $form['vote'] = array(
     '#type' => 'fivestar',
     '#stars' => $settings['stars'],
-    '#auto_submit' => isset($settings['autosubmit']) ? $settings['autosubmit'] : TRUE,
+    '#auto_submit' => $settings['autosubmit'],
     '#allow_clear' => $settings['allow_clear'],
     '#allow_revote' => $settings['allow_revote'],
     '#allow_ownvote' => $settings['allow_ownvote'],
-    '#required' => isset($settings['required']) ? $settings['required'] : FALSE,
-    '#widget' => isset($settings['widget']) ? $settings['widget'] : array('name' => 'default', 'css' => 'default'),
+    '#required' => $settings['required'],
+    '#widget' => $settings['widget'],
     '#values' => $values,
     '#settings' => $settings,
     '#description' => $settings['description'],
@@ -498,7 +517,8 @@ function fivestar_ajax_submit($form, $form_state) {
 
   // We need to process the 'fivestar' element with the new values.
   $form['vote']['#values'] = $values;
-  $new_element = fivestar_expand($form['vote']);
+  // Also need to pass on form_state and the complete form, just like form_builder() does.
+  $new_element = fivestar_expand($form['vote'], $form_state, $form_state['complete form']);
   // Update the description. Since it doesn't account of our cast vote above.
   // TODO: Look into all this, I honestly don't like it and it's a bit weird.
   $form['vote']['vote']['#description'] = isset($new_element['vote']['#description']) ? $new_element['vote']['#description'] : '';
@@ -549,7 +569,7 @@ function fivestar_element_info() {
 /**
  * Process callback for fivestar_element -- see fivestar_element()
  */
-function fivestar_expand($element) {
+function fivestar_expand($element, $form_state, $complete_form) {
   if (!_fivestar_allow_vote($element)){
     $element['#input'] = FALSE;
   }
@@ -562,10 +582,19 @@ function fivestar_expand($element) {
   $values = $element['#values'];
   $class[] = 'clearfix';
 
+  $title = 'it';
+  if (isset($element['#settings']['entity_id']) && isset($element['#settings']['entity_type'])) {
+    $entity_id = $element['#settings']['entity_id'];
+    $entity = entity_load($element['#settings']['entity_type'], array($entity_id));
+    $entity = $entity[$entity_id];
+    $title = $entity->title;
+  } elseif (isset($complete_form['#node'])) {
+    $title = $complete_form['#node']->title;
+  }
   $options = array('-' => t('Select rating'));
   for ($i = 1; $i <= $element['#stars']; $i++) {
     $this_value = ceil($i * 100/$element['#stars']);
-    $options[$this_value] = t('Give it @star/@count', array('@star' => $i, '@count' => $element['#stars']));
+    $options[$this_value] = t('Give @title @star/@count', array('@title' => $title, '@star' => $i, '@count' => $element['#stars']));
   }
   // Display clear button only if enabled.
   if ($element['#allow_clear'] == TRUE) {
diff --git a/drupal7/sites/all/modules/fivestar/includes/fivestar.field.inc b/drupal7/sites/all/modules/fivestar/includes/fivestar.field.inc
index b6972568..053d5a1c 100644
--- a/drupal7/sites/all/modules/fivestar/includes/fivestar.field.inc
+++ b/drupal7/sites/all/modules/fivestar/includes/fivestar.field.inc
@@ -80,14 +80,14 @@ function fivestar_field_instance_settings_form($field, $instance) {
   $form['allow_revote'] = array(
     '#type' => 'checkbox',
     '#title' => t('Allow users to re-vote on already voted content.'),
-    '#default_value' => isset($instance['settings']['allow_revote']) ? $instance['settings']['allow_revote'] : FALSE,
+    '#default_value' => isset($instance['settings']['allow_revote']) ? $instance['settings']['allow_revote'] : TRUE,
     '#return_value' => 1,
   );
 
   $form['allow_ownvote'] = array(
     '#type' => 'checkbox',
     '#title' => t('Allow users to vote on their own content.'),
-    '#default_value' => isset($instance['settings']['allow_ownvote']) ? $instance['settings']['allow_ownvote'] : FALSE,
+    '#default_value' => isset($instance['settings']['allow_ownvote']) ? $instance['settings']['allow_ownvote'] : TRUE,
     '#return_value' => 1,
   );
 
@@ -133,7 +133,7 @@ function _fivestar_field_helper($entity_type, $entity, $field, $instance, $langc
     else {
       $rating = (isset($items[$delta]['rating'])) ? $items[$delta]['rating'] : 0;
     }
-    $target = _fivestar_field_target($entity, $field, $instance, $item, $langcode);    
+    $target = _fivestar_field_target($entity, $field, $instance, $item, $langcode);
     if (!empty($target)) {
       if ($entity_type == 'comment' && $op == 'delete') {
         $target['vote_source'] = $entity->hostname;
@@ -358,11 +358,11 @@ function fivestar_field_formatter_info() {
       ),
     ),
     'fivestar_formatter_rating' => array(
-      'label' => t('Rating (i.e. 4.2/5)'),
+      'label' => t('Rating (e.g. 4.2/5)'),
       'field types' => array('fivestar'),
     ),
     'fivestar_formatter_percentage' => array(
-      'label' => t('Percentage (i.e. 92)'),
+      'label' => t('Percentage (e.g. 92)'),
       'field types' => array('fivestar'),
     ),
   );
diff --git a/drupal7/sites/all/modules/piwik/piwik.admin.inc b/drupal7/sites/all/modules/piwik/piwik.admin.inc
index ae651443..644b967e 100644
--- a/drupal7/sites/all/modules/piwik/piwik.admin.inc
+++ b/drupal7/sites/all/modules/piwik/piwik.admin.inc
@@ -214,6 +214,18 @@ function piwik_admin_settings_form($form_state) {
     ),
   );
 
+  $colorbox_dependencies = '<div class="admin-requirements">';
+  $colorbox_dependencies .= t('Requires: !module-list', array('!module-list' => (module_exists('colorbox') ? t('@module (<span class="admin-enabled">enabled</span>)', array('@module' => 'Colorbox')) : t('@module (<span class="admin-disabled">disabled</span>)', array('@module' => 'Colorbox')))));
+  $colorbox_dependencies .= '</div>';
+
+  $form['tracking']['linktracking']['piwik_trackcolorbox'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Track content in colorbox modal dialogs'),
+    '#default_value' => variable_get('piwik_trackcolorbox', 1),
+    '#description' => t('Enable to track the content shown in colorbox modal windows.') . $colorbox_dependencies,
+    '#disabled' => (module_exists('colorbox') ? FALSE : TRUE),
+  );
+
   // Message specific configurations.
   $form['tracking']['messagetracking'] = array(
     '#type' => 'fieldset',
@@ -476,6 +488,12 @@ function piwik_admin_settings_form_validate($form, &$form_state) {
 
 /**
  * Layout for the custom variables table in the admin settings form.
+ *
+ * @param array $variables
+ *   An array contains the form elements.
+ *
+ * @return string
+ *   The rendered output.
  */
 function theme_piwik_admin_custom_var_table($variables) {
   $form = $variables['form'];
@@ -537,6 +555,13 @@ function piwik_token_element_validate(&$element, &$form_state) {
   return $element;
 }
 
+/**
+ * @param array $value
+ *   An array of token values.
+ *
+ * @return array
+ *   A unique array of invalid tokens.
+ */
 function _piwik_get_forbidden_tokens($value) {
   $invalid_tokens = array();
   $value_tokens = is_string($value) ? token_scan($value) : $value;
@@ -554,8 +579,9 @@ function _piwik_get_forbidden_tokens($value) {
 /**
  * Validate if a string contains forbidden tokens not allowed by privacy rules.
  *
- * @param $token_string
+ * @param string $token_string
  *   A string with one or more tokens to be validated.
+ *
  * @return boolean
  *   TRUE if blacklisted token has been found, otherwise FALSE.
  */
diff --git a/drupal7/sites/all/modules/piwik/piwik.admin.js b/drupal7/sites/all/modules/piwik/piwik.admin.js
index 21fb3740..e5a0b604 100644
--- a/drupal7/sites/all/modules/piwik/piwik.admin.js
+++ b/drupal7/sites/all/modules/piwik/piwik.admin.js
@@ -73,6 +73,9 @@ Drupal.behaviors.trackingSettingsSummary = {
         vals.push(Drupal.t('Outbound links'));
         vals.push(Drupal.t('Downloads'));
       }
+      if ($('input#edit-piwik-trackcolorbox', context).is(':checked')) {
+        vals.push(Drupal.t('Colorbox'));
+      }
       if (!vals.length) {
         return Drupal.t('Not tracked');
       }
diff --git a/drupal7/sites/all/modules/piwik/piwik.info b/drupal7/sites/all/modules/piwik/piwik.info
index de55f0a3..3334d13f 100644
--- a/drupal7/sites/all/modules/piwik/piwik.info
+++ b/drupal7/sites/all/modules/piwik/piwik.info
@@ -5,9 +5,9 @@ package = Statistics
 configure = admin/config/system/piwik
 files[] = piwik.test
 test_dependencies[] = token
-; Information added by Drupal.org packaging script on 2014-11-29
-version = "7.x-2.7"
+; Information added by Drupal.org packaging script on 2016-04-23
+version = "7.x-2.8"
 core = "7.x"
 project = "piwik"
-datestamp = "1417276085"
+datestamp = "1461442443"
 
diff --git a/drupal7/sites/all/modules/piwik/piwik.install b/drupal7/sites/all/modules/piwik/piwik.install
index a5ccb086..82d1d98d 100644
--- a/drupal7/sites/all/modules/piwik/piwik.install
+++ b/drupal7/sites/all/modules/piwik/piwik.install
@@ -36,6 +36,7 @@ function piwik_uninstall() {
   variable_del('piwik_roles');
   variable_del('piwik_site_id');
   variable_del('piwik_site_search');
+  variable_del('piwik_trackcolorbox');
   variable_del('piwik_trackmailto');
   variable_del('piwik_track'); // interrims solution
   variable_del('piwik_trackfiles_extensions');
@@ -67,10 +68,10 @@ function piwik_requirements($phase) {
   $t = get_t();
 
   switch ($phase) {
-    case 'runtime' :
+    case 'runtime':
       // Module cannot validate piwik URL without external HTTP requests.
       if (variable_get('drupal_http_request_fails', TRUE) && !system_check_http_request()) {
-        $requirements['http requests'] = array(
+        $requirements['piwik_http_requests'] = array(
           'title' => $t('HTTP request status'),
           'value' => $t('Fails'),
           'severity' => REQUIREMENT_ERROR,
diff --git a/drupal7/sites/all/modules/piwik/piwik.js b/drupal7/sites/all/modules/piwik/piwik.js
index 2d357074..f780be4b 100644
--- a/drupal7/sites/all/modules/piwik/piwik.js
+++ b/drupal7/sites/all/modules/piwik/piwik.js
@@ -19,13 +19,15 @@ $(document).ready(function() {
 
   // Colorbox: This event triggers when the transition has completed and the
   // newly loaded content has been revealed.
-  $(document).bind("cbox_complete", function () {
-    var href = $.colorbox.element().attr("href");
-    if (href) {
-      _paq.push(["setCustomUrl", href]);
-      _paq.push(["trackPageView"]);
-    }
-  });
+  if (Drupal.settings.piwik.trackColorbox) {
+    $(document).bind("cbox_complete", function () {
+      var href = $.colorbox.element().attr("href");
+      if (href) {
+        _paq.push(["setCustomUrl", href]);
+        _paq.push(["trackPageView"]);
+      }
+    });
+  }
 
 });
 
diff --git a/drupal7/sites/all/modules/piwik/piwik.module b/drupal7/sites/all/modules/piwik/piwik.module
index 1721fdf4..600e2dda 100644
--- a/drupal7/sites/all/modules/piwik/piwik.module
+++ b/drupal7/sites/all/modules/piwik/piwik.module
@@ -112,6 +112,10 @@ function piwik_page_alter(&$page) {
     $link_settings = array();
     $link_settings['trackMailto'] = variable_get('piwik_trackmailto', 1);
 
+    if (module_exists('colorbox') && ($track_colorbox = variable_get('googleanalytics_trackcolorbox', 1))) {
+      $link_settings['trackColorbox'] = $track_colorbox;
+    }
+
     drupal_add_js(array('piwik' => $link_settings), 'setting');
     drupal_add_js(drupal_get_path('module', 'piwik') . '/piwik.js');
 
@@ -132,7 +136,7 @@ function piwik_page_alter(&$page) {
 
       if (!empty($titles)) {
         // Encode title, at least to keep "/" intact.
-        $titles = array_map('urlencode', $titles);
+        $titles = array_map('rawurlencode', $titles);
 
         $set_document_title = drupal_json_encode(implode('/', $titles));
       }
@@ -231,7 +235,7 @@ function piwik_page_alter(&$page) {
       // The USER_ID value should be a unique, persistent, and non-personally
       // identifiable string identifier that represents a user or signed-in
       // account across devices.
-      $script .= '_paq.push(["setUserId", ' . drupal_json_encode(drupal_hmac_base64($user->uid, drupal_get_private_key() . drupal_get_hash_salt())) . ']);';
+      $script .= '_paq.push(["setUserId", ' . drupal_json_encode(piwik_user_id_hash($user->uid)) . ']);';
     }
 
     // Set custom data.
@@ -348,6 +352,23 @@ function piwik_page_alter(&$page) {
   }
 }
 
+/**
+ * Generate user id hash to implement USER_ID.
+ *
+ * The USER_ID value should be a unique, persistent, and non-personally
+ * identifiable string identifier that represents a user or signed-in
+ * account across devices.
+ *
+ * @param int $uid
+ *   User id.
+ *
+ * @return string
+ *   User id hash.
+ */
+function piwik_user_id_hash($uid) {
+  return drupal_hmac_base64($uid, drupal_get_private_key() . drupal_get_hash_salt());
+}
+
 /**
  * Implements hook_field_extra_fields().
  */
diff --git a/drupal7/sites/all/modules/piwik/piwik.variable.inc b/drupal7/sites/all/modules/piwik/piwik.variable.inc
index 7bd18661..55b1b5d0 100644
--- a/drupal7/sites/all/modules/piwik/piwik.variable.inc
+++ b/drupal7/sites/all/modules/piwik/piwik.variable.inc
@@ -40,6 +40,10 @@ function piwik_variable_group_info() {
 
 /**
  * Validate Piwik site ID variable.
+ *
+ * @param array $variable
+ *
+ * @return string
  */
 function piwik_validate_piwik_site_id($variable) {
   if (!preg_match('/^\d{1,}$/', $variable['value'])) {
