From 386b4930e5ab8e904c867503e79d56d74821762f Mon Sep 17 00:00:00 2001
From: Frederic Guillot <fred@kanboard.net>
Date: Thu, 19 Oct 2017 16:26:15 -0700
Subject: Add tags to task export

---
 app/Export/TaskExport.php             | 16 +++++++++++++---
 tests/units/Export/TaskExportTest.php |  5 ++++-
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/app/Export/TaskExport.php b/app/Export/TaskExport.php
index 3019906d..f0685576 100644
--- a/app/Export/TaskExport.php
+++ b/app/Export/TaskExport.php
@@ -30,11 +30,13 @@ class TaskExport extends Base
     public function export($project_id, $from, $to)
     {
         $tasks = $this->getTasks($project_id, $from, $to);
+        $taskIds = array_column($tasks, 'id');
+        $tags = $this->taskTagModel->getTagsByTaskIds($taskIds);
         $colors = $this->colorModel->getList();
         $results = array($this->getColumns());
 
         foreach ($tasks as &$task) {
-            $task = $this->format($task, $colors);
+            $task = $this->format($task, $colors, $tags);
             $results[] = array_values($task);
         }
 
@@ -104,14 +106,16 @@ class TaskExport extends Base
      *
      * @access protected
      * @param  array  $task
-     * @param  array   $colors
+     * @param  array  $colors
+     * @param  array  $tags
      * @return array
      */
-    protected function format(array &$task, array $colors)
+    protected function format(array &$task, array $colors, array &$tags)
     {
         $task['is_active'] = $task['is_active'] == TaskModel::STATUS_OPEN ? e('Open') : e('Closed');
         $task['color_id'] = $colors[$task['color_id']];
         $task['score'] = $task['score'] ?: 0;
+        $task['tags'] = '';
 
         $task = $this->dateParser->format(
             $task,
@@ -119,6 +123,11 @@ class TaskExport extends Base
             $this->dateParser->getUserDateTimeFormat()
         );
 
+        if (isset($tags[$task['id']])) {
+            $taskTags = array_column($tags[$task['id']], 'name');
+            $task['tags'] = implode(', ', $taskTags);
+        }
+
         return $task;
     }
 
@@ -154,6 +163,7 @@ class TaskExport extends Base
             e('Time estimated'),
             e('Time spent'),
             e('Priority'),
+            e('Tags'),
         );
     }
 }
diff --git a/tests/units/Export/TaskExportTest.php b/tests/units/Export/TaskExportTest.php
index c57c5259..ca0fb8de 100644
--- a/tests/units/Export/TaskExportTest.php
+++ b/tests/units/Export/TaskExportTest.php
@@ -37,12 +37,13 @@ class TaskExportTest extends Base
             'swimlane_id' => 2,
             'title' => 'Task 2',
             'date_due' => time(),
+            'tags' => array('tag 1', 'tag 2'),
         )));
 
         $report = $taskExport->export(1, date('Y-m-d'), date('Y-m-d'));
 
         $this->assertCount(3, $report);
-        $this->assertCount(23, $report[0]);
+        $this->assertCount(24, $report[0]);
         $this->assertEquals('Task Id', $report[0][0]);
 
         $this->assertEquals(1, $report[1][0]);
@@ -77,5 +78,7 @@ class TaskExportTest extends Base
 
         $this->assertEquals(2.5, $report[1][20]);
         $this->assertEquals(0, $report[2][20]);
+
+        $this->assertEquals('tag 1, tag 2', $report[2][23]);
     }
 }
-- 
cgit v1.2.3