From 1feb6d2b2fe93bf612131ab395cf45bb038ecfb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Mon, 15 Nov 2021 08:37:51 +0800 Subject: [PATCH] * code for task #43747. --- api/v1/entries/products.php | 65 +++++++++++++++++++++++++++++++++-- framework/api/entry.class.php | 2 +- 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/api/v1/entries/products.php b/api/v1/entries/products.php index 94053ce8e6..1ddbd6f055 100644 --- a/api/v1/entries/products.php +++ b/api/v1/entries/products.php @@ -43,6 +43,8 @@ class productsEntry extends entry } else { + $mergeChildren = $this->param('mergeChildren', ''); + $control = $this->loadController('product', 'all'); $control->all($this->param('status', 'all'), $this->param('order', 'order_asc')); @@ -51,10 +53,67 @@ class productsEntry extends entry if(isset($data->status) and $data->status == 'success') { $result = array(); - $products = $data->data->productStats; - foreach($products as $product) $result[] = $this->format($product, 'createdDate:time'); + if($mergeChildren) + { + $programs = array(); + foreach($data->data->productStructure as $programID => $program) + { + $programs[$programID] = new stdclass(); + $programs[$programID]->id = $programID; + $programs[$programID]->name = $program->programName; + $programs[$programID]->type = 'program'; - return $this->send(200, array('products' => $result)); + foreach($program as $field => $value) + { + if(!isset($programs[$programID]->children)) $programs[$programID]->children = array(); + if(isset($value->products)) + { + $lineID = $field; + if(empty($lineID)) + { + foreach($value->products as $product) + { + unset($product->desc); + $product->stories = (array)$product->stories; + $product->requirements = (array)$product->requirements; + $closedTotal = ($product->stories['closed'] + $product->requirements['closed']); + $allTotal = (array_sum($product->stories) + array_sum($product->requirements)); + $product->progress = empty($closedTotal) ? 0 : round($closedTotal / $allTotal * 100, 1); + $programs[$programID]->children[$product->id] = $product; + } + } + else + { + $line = new stdclass(); + $line->id = $lineID; + $line->name = $value->lineName; + $line->type = 'line'; + + $line->children = array(); + foreach($value->products as $product) + { + unset($product->desc); + $product->stories = (array)$product->stories; + $product->requirements = (array)$product->requirements; + $closedTotal = ($product->stories['closed'] + $product->requirements['closed']); + $allTotal = (array_sum($product->stories) + array_sum($product->requirements)); + $product->progress = empty($closedTotal) ? 0 : round($closedTotal / $allTotal * 100, 1); + $line->children[$product->id] = $product; + } + + $programs[$programID]->children[$lineID] = $line; + } + } + } + } + return $this->send(200, $programs); + } + else + { + $products = $data->data->productStats; + foreach($products as $product) $result[] = $this->format($product, 'createdDate:time'); + return $this->send(200, array('products' => $result)); + } } } diff --git a/framework/api/entry.class.php b/framework/api/entry.class.php index bd1e9bb5f0..983177ad7c 100644 --- a/framework/api/entry.class.php +++ b/framework/api/entry.class.php @@ -633,7 +633,7 @@ class baseEntry { $module = $this->app->getModuleName(); $method = $this->app->getMethodName(); - if($module and $method and !commonModel::hasPriv($module, $method)) + if($module and $method and !$this->loadModel('common')->isOpenMethod($module, $method) and !commonModel::hasPriv($module, $method)) { $this->send(403, array('error' => 'Access not allowed')); }