diff --git a/drupalorg_project/drupalorg_project.module b/drupalorg_project/drupalorg_project.module index 4b75825f8b68b34639e9580ae3e6803fd730f171..7046a74b3ac52060e5745ecb579de00b83a0eb22 100644 --- a/drupalorg_project/drupalorg_project.module +++ b/drupalorg_project/drupalorg_project.module @@ -1528,6 +1528,10 @@ function drupalorg_project_ctools_plugin_api($module, $api) { } } +function drupalorg_project_views_api() { + return array("version" => 3.0); +} + /** * Implements hook_views_pre_render(). * @@ -1619,6 +1623,109 @@ function drupalorg_project_form_views_exposed_form_alter(&$form, &$form_state) { } /** + * Implements hook_views_post_execute(). + * @param $view + * + * Checks to see the status of Drupal 8 for the contributed module. + */ + +function drupalorg_project_views_post_execute(&$view) { + if ($view->name == 'project_release_download_table' && ($view->current_display == 'recommended' && !empty($view->result)) || ($view->current_display == 'security' && !empty($view->result))) { + if (count($view->args)) { + $node = node_load($view->args[0]); + } + $project_type = explode('_', $node->type); + $project_type = array_pop($project_type); + // We don't need to tell core it needs a D8 release, right? ;) + if ($project_type == 'core') { + return; + } + + if (!empty($node->field_project_type) && $node->field_project_type[$node->language][0]['value'] === 'full') { + // Build list of possible issue target versions for dev version of core: 8.0.x, 8.0.0-beta1, etc. + $releases = project_release_query_releases($node->nid, array(103, 87)); + $versions = array(); + // TODO: Remove the hardcodedness of this code. + // Look through all releases to see if there is a 6.x, 7.x, or 8.x release + foreach ($releases as $tid => $release) { + $core = explode('-', $release->field_release_version[$release->language][0]['value']); + $core = array_shift($core); + $versions[$core] = TRUE; + } + // We have potentially upgradable release! + if (array_key_exists('6.x', $versions) || array_key_exists('7.x', $versions)) { + // Check to see the status of the 8.x release from contrib_tracker. + $query = new EntityFieldQuery(); + $query + ->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'project_issue') + ->propertyCondition('title', $node->field_project_machine_name[$node->language][0]['value'], 'CONTAINS') + ->fieldCondition('field_project', 'target_id', 2509763, '=') + ->range(0, 1); + + $entities = $query->execute(); + // No 8.x issue, post message + if (empty($entities['node'])) { + $message = array( + 'message' => t('No Drupal 8 port information has been found for this !project. Help us by creating an !issue.', array('!project' => $project_type, '!issue' => l('issue', '/node/2573659'))), + 'status' => 'error', + ); + } + else if ($issue = array_keys($entities['node'])) { + // Load the issue up and get relevant status + $issue = node_load(array_shift($issue)); + // See https://www.drupal.org/project/contrib_tracker for mapping. + switch($issue->field_issue_status[$issue->language][0]['value']) { + case 1: // Active + case 4: // Postponed + $message = array( + 'message' => t('This !project has not been ported to Drupal 8. Help us by creating an !issue.', array('!project' => $project_type, '!issue' => l('issue', '/node/'. $issue->nid))), + 'status' => 'error', + ); + break; + case 13: // Needs work + case 16: // Needs more info + $message = array( + 'message' => t('This !project is currently being ported to Drupal 8, but is not usable yet. Help us by following this !issue.', array('!project' => $project_type, '!issue' => l('issue', '/node/'. $issue->nid))), + 'status' => 'warning', + ); + break; + case 8: // Needs review + case 14: // RTBC + $message = array( + 'message' => t('This !project has a pre-release version for Drupal 8. To find out more, follow this !issue or download below.', array('!project' => $project_type, '!issue' => l('issue', '/node/'. $issue->nid))), + 'status' => 'messages status', + ); + break; + case 2: // Fixed + case 7: // Closed (Fixed) + $message = array(); + break; + case 5: // Closed (won't fix) + $message = array( + 'message' => t('This !project has been included with Drupal 8 core.', array('!project' => $project_type)), + 'status' => 'help', + ); + break; + case 3: // Closed (duplicate) + $message = array( + 'message' => t('This !project has been renamed or deprecated by another %project. Please visit this !issue for more information.', array('!project' => $project_type, '!issue' => l('issue', '/node/'. $issue->nid))), + 'status' => 'help', + ); + break; + } + } + } + // Fetch the project, message variable, and only print upon full projects. + if (!empty($message)) { + $view->attachment_before = '
' . $message['message'] . '
';; + } + } + + } +} + +/** * Implementation of hook_form_FORM_ID_alter(). */ function drupalorg_project_form_project_issue_issue_cockpit_searchbox_alter(&$form) { @@ -1822,3 +1929,4 @@ function drupalorg_project_codereview_access($node) { } return FALSE; } +