You are here

public function PatchInfoDrupalorgCommands::list in PatchInfo 8.2

Show a report of patches applied to Drupal core and contrib projects.

@command patchinfo_drupalorg:list @field-labels project: Project project_label: Project label delta: Delta info: Info url: URL issue_number: Issue number issue_url: Issue URL issue_title: Issue Title issue_status: Issue Status issue_priority: Issue Priority issue_category: Issue Category issue_author_name: Issue Author Name issue_created: Issue Created issue_changed: Issue Changed @default-string-field name @usage patchinfo-do-list --projects=drupal @usage patchinfo-do-list --projects=drupal,pathauto @usage patchinfo-do-list --format=yaml @usage patchinfo-do-list --format=csv @usage patchinfo-do-list --fields=name,info @usage patchinfo-do-list --fields=Label,Delta @aliases patchinfo-do-list @hidden

Parameters

array $options: Array of output options.

Return value

\Consolidation\OutputFormatters\StructuredData\RowsOfFields Patch information as rows of fields.

Overrides PatchInfoCommands::list

File

modules/patchinfo_drupalorg/src/Commands/PatchInfoDrupalorgCommands.php, line 98

Class

PatchInfoDrupalorgCommands
A Drush commandfile for the patchinfo_drupalorg:list command.

Namespace

Drupal\patchinfo_drupalorg\Commands

Code

public function list(array $options = [
  'projects' => NULL,
  'format' => 'table',
  'fields' => 'project,project_label,delta,url,issue_number,issue_title,issue_url,issue_status,issue_priority,issue_category,issue_author_name,issue_created,issue_changed',
]) {
  $table = $this
    ->getTableData($options['projects']);
  $pattern = '/(Issue\\ |issue\\ |#)(?P<issuenumber>\\d+)(\\||,|\\.|\\ |:|$)/';
  foreach ($table as $key => $patchinfo_list_row) {
    $patchinfo_list_row['project'] = $patchinfo_list_row['name'];
    $patchinfo_list_row['project_label'] = $patchinfo_list_row['label'];
    $patchinfo_list_row['issue_number'] = '';
    $patchinfo_list_row['issue_url'] = '';
    $patchinfo_list_row['issue_title'] = $patchinfo_list_row['info'];
    $patchinfo_list_row['issue_status'] = '';
    $patchinfo_list_row['issue_priority'] = '';
    $patchinfo_list_row['issue_category'] = '';
    $patchinfo_list_row['issue_author_name'] = '';
    $success = preg_match($pattern, $patchinfo_list_row['info'], $match);
    if ($success && isset($match['issuenumber'])) {
      $drupalorg_id = $match['issuenumber'];
      $composer_module_issue = (object) $this->patchinfoDrupalorgService
        ->getIssue($drupalorg_id);
      if ($composer_module_issue) {
        $patchinfo_list_row['issue_number'] = $composer_module_issue->nid;
        $patchinfo_list_row['issue_url'] = $composer_module_issue->url;
        $patchinfo_list_row['issue_title'] = $composer_module_issue->title;
        $patchinfo_list_row['issue_status'] = self::$issueStatus[$composer_module_issue->field_issue_status];
        $patchinfo_list_row['issue_priority'] = self::$issuePriorities[$composer_module_issue->field_issue_priority];
        $patchinfo_list_row['issue_category'] = self::$issueCategories[$composer_module_issue->field_issue_category];
        $patchinfo_list_row['issue_author_name'] = $composer_module_issue->author->name;
        $patchinfo_list_row['issue_created'] = date('Y-m-d\\TH:i:s', $composer_module_issue->created);
        $patchinfo_list_row['issue_changed'] = date('Y-m-d\\TH:i:s', $composer_module_issue->changed);
      }
    }
    $table[$key] = $patchinfo_list_row;
  }
  $data = new RowsOfFields($table);
  $data
    ->addRendererFunction(function ($key, $cellData, FormatterOptions $options, $rowData) {
    if ($key === 'project') {
      return "<comment>{$cellData}</>";
    }
    return $cellData;
  });
  return $data;
}