FOSSology  4.7.0-rc1
Open Source License Compliance by Open Source Software
AdminBulkTextExport.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2026 Kaushlendra Pratap <kaushlendra-pratap.singh@siemens.com>
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
8 namespace Fossology\UI\Page;
9 
16 use Symfony\Component\HttpFoundation\Request;
17 use Symfony\Component\HttpFoundation\Response;
18 
23 {
24  const NAME = "admin_bulk_text_export";
25 
27  private $dbManager;
28 
30  private $userDao;
31 
32  function __construct()
33  {
34  parent::__construct(self::NAME, array(
35  self::TITLE => "Admin Bulk Text Export",
36  self::MENU_LIST => "Admin::Bulk::Bulk Text Export",
37  self::REQUIRES_LOGIN => true,
38  self::PERMISSION => Auth::PERM_ADMIN
39  ));
40  $this->dbManager = $this->getObject('db.manager');
41  $this->userDao = $this->getObject('dao.user');
42  }
43 
48  protected function handle(Request $request)
49  {
50  if ($request->get('export', false)) {
51  return $this->handleExport($request);
52  }
53 
54  $vars = $this->getFormVars();
55  return $this->render('admin_bulk_text_export.html.twig', $this->mergeWithDefault($vars));
56  }
57 
62  private function getFormVars()
63  {
64  $userId = Auth::getUserId();
65  $groupMap = $this->userDao->getAdminGroupMap($userId, $_SESSION[Auth::USER_LEVEL]);
66  $vars = array(
67  'users' => $this->userDao->getUsersByGroup(),
68  'groups' => $groupMap
69  );
70  return $vars;
71  }
72 
78  private function handleExport(Request $request)
79  {
80  $exportFormat = $request->get('export_format', 'csv');
81  $filterType = $request->get('filter_type', 'all');
82  $user_pk = intval($request->get('selected_user', 0));
83  $group_pk = intval($request->get('selected_group', 0));
84  $delimiter = $request->get('delimiter', ',');
85  $enclosure = $request->get('enclosure', '"');
86  $includeLicenseText = $request->get('include_license_text', false) ? true : false;
87 
88  if (!in_array($exportFormat, array('csv', 'json'))) {
89  $exportFormat = 'csv';
90  }
91 
92  if ($exportFormat === 'json') {
93  $fileName = "fossology-bulk-text-export-" . date("YMj-Gis") . '.json';
94  $contentType = 'application/json';
95  $generateJson = true;
96  } else {
97  $fileName = "fossology-bulk-text-export-" . date("YMj-Gis") . '.csv';
98  $contentType = 'text/csv';
99  $generateJson = false;
100  }
101 
102  $filterUserPk = 0;
103  $filterGroupPk = 0;
104 
105  if ($filterType === 'user' && $user_pk > 0) {
106  $filterUserPk = $user_pk;
107  } elseif ($filterType === 'group' && $group_pk > 0) {
108  $filterGroupPk = $group_pk;
109  }
110 
111  $bulkTextExporter = new BulkTextExport($this->dbManager);
112  if (!$generateJson) {
113  try {
114  $bulkTextExporter->setDelimiter($delimiter);
115  $bulkTextExporter->setEnclosure($enclosure);
116  } catch (\InvalidArgumentException $e) {
117  return new Response($e->getMessage(), 400, array('Content-Type' => 'text/plain; charset=UTF-8'));
118  }
119  }
120 
121  $content = $bulkTextExporter->exportBulkText($filterUserPk, $filterGroupPk, $generateJson, $includeLicenseText);
122 
123  return DownloadUtil::getDownloadResponse($content, $fileName, $contentType);
124  }
125 }
126 
127 register_plugin(new AdminBulkTextExport());
Helper class to export license reference bulk data as CSV or JSON from the DB.
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
static getUserId()
Get the current user's id.
Definition: Auth.php:68
render($templateName, $vars=null, $headers=null)
static getDownloadResponse($content, $fileName, $contentType='text/csv')
Export bulk text license data as CSV or JSON.
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16