FOSSology  4.6.0
Open Source License Compliance by Open Source Software
common-folders.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2008-2015 Hewlett-Packard Development Company, L.P.
4  SPDX-FileCopyrightText: © 2014-2017 Siemens AG
5 
6  SPDX-License-Identifier: LGPL-2.1-only
7 */
8 
12 
26 function FolderGetTop()
27 {
28  /* Get the list of folders */
29  if (! empty($_SESSION['Folder'])) {
30  return ($_SESSION['Folder']);
31  }
32  global $PG_CONN;
33  if (empty($PG_CONN)) {
34  return;
35  }
36  $sql = "SELECT root_folder_fk FROM users ORDER BY user_pk ASC LIMIT 1";
37  $result = pg_query($PG_CONN, $sql);
38  DBCheckResult($result, $sql, __FILE__, __LINE__);
39  $row = pg_fetch_assoc($result);
40  pg_free_result($result);
41  return($row['root_folder_fk']);
42 } // FolderGetTop()
43 
51 {
52  global $PG_CONN;
53 
54  /* validate inputs */
55  $user_pk = Auth::getUserId();
56 
57  /* everyone has a user_pk, even if not logged in. But verify. */
58  if (empty($user_pk)) {
59  return "__FILE__:__LINE__ GetUserRootFolder(Not logged in)<br>";
60  }
61 
62  /* Get users root folder */
63  $sql = "select root_folder_fk from users where user_pk=$user_pk";
64  $result = pg_query($PG_CONN, $sql);
65  DBCheckResult($result, $sql, __FILE__, __LINE__);
66  $UsersRow = pg_fetch_assoc($result);
67  $root_folder_fk = $UsersRow['root_folder_fk'];
68  pg_free_result($result);
69  if (empty($root_folder_fk)) {
70  $text = _("Missing root_folder_fk for user ");
71  fatal("<h2>".$text.$user_pk."</h2>", __FILE__, __LINE__);
72  }
73  return $root_folder_fk;
74 } // GetUserRootFolder()
75 
90 function Folder2Path($folder_pk)
91 {
92  global $PG_CONN;
93  $FolderList = array();
94 
95  /* validate inputs */
96  if (empty($folder_pk)) {
97  return __FILE__.":".__LINE__." Folder2Browse(empty)<br>";
98  }
99 
100  /* Get users root folder */
101  $root_folder_fk = GetUserRootFolder(); // will fail if no user session
102 
103  while ($folder_pk) {
104  $sql = "select folder_pk, folder_name from folder where folder_pk='$folder_pk'";
105  $result = pg_query($PG_CONN, $sql);
106  DBCheckResult($result, $sql, __FILE__, __LINE__);
107  $FolderRow = pg_fetch_assoc($result);
108  pg_free_result($result);
109  array_unshift($FolderList, $FolderRow);
110 
111  // Limit folders to user root. Limit to an arbitrary 20 folders as a failsafe
112  // against this loop going infinite.
113  if (($folder_pk == $root_folder_fk) || (count($FolderList)>20)) {
114  break;
115  }
116 
117  $sql = "select parent_fk from foldercontents where child_id='$folder_pk' and foldercontents_mode=".FolderDao::MODE_FOLDER;
118  $result = pg_query($PG_CONN, $sql);
119  DBCheckResult($result, $sql, __FILE__, __LINE__);
120  $FolderRow = pg_fetch_assoc($result);
121  pg_free_result($result);
122  $folder_pk = $FolderRow['parent_fk'];
123  }
124  return($FolderList);
125 } // Folder2Path()
126 
127 
138 function GetFolderFromItem($upload_pk="", $uploadtree_pk = "")
139 {
140  global $PG_CONN;
141 
142  /* validate inputs */
143  if (empty($uploadtree_pk) && empty($upload_pk)) {
144  return "__FILE__:__LINE__ GetFolderFromItem(empty)<br>";
145  }
146 
147  if (empty($upload_pk)) {
148  $UTrec = GetSingleRec("uploadtree", "where uploadtree_pk=$uploadtree_pk");
149  $upload_pk = $UTrec['upload_fk'];
150  }
151 
152  $sql = "select parent_fk from foldercontents where child_id='$upload_pk' and foldercontents_mode=".FolderDao::MODE_UPLOAD;
153  $result = pg_query($PG_CONN, $sql);
154  DBCheckResult($result, $sql, __FILE__, __LINE__);
155  $FolderRow = pg_fetch_assoc($result);
156  pg_free_result($result);
157  return $FolderRow['parent_fk'];
158 } // GetFolderFromItem()
159 
160 
178 function FolderListOption($ParentFolder,$Depth, $IncludeTop=1, $SelectId=-1, $linkParent=false, $OldParent=0)
179 {
180  global $container;
181 
182  $dbManager = $container->get('db.manager');
183  $folderDao = $container->get('dao.folder');
184 
185  if ($ParentFolder == "-1") {
186  $ParentFolder = FolderGetTop();
187  }
188  if (empty($ParentFolder)) {
189  return;
190  }
191 
192  $ParentFolder = intval($ParentFolder);
193 
194  $statementName = __METHOD__ . '.folderTree';
195  $sql = $folderDao->getFolderTreeCte($ParentFolder) . "
196  SELECT folder_pk, parent_fk, folder_name, depth
197  FROM folder_tree
198  ORDER BY name_path";
199 
200  $dbManager->prepare($statementName, $sql);
201  $res = $dbManager->execute($statementName, array($ParentFolder));
202 
203  $V = "";
204  while ($row = $dbManager->fetchArray($res)) {
205  $folderDepth = intval($row['depth']);
206  $folderPk = $row['folder_pk'];
207  $parentFk = $row['parent_fk'];
208 
209  if ($folderDepth == 0 && !$IncludeTop) {
210  continue;
211  }
212 
213  if ($folderPk == $SelectId) {
214  $V .= "<option value='$folderPk' SELECTED>";
215  } elseif ($linkParent) {
216  $parent = empty($parentFk) ? 0 : $parentFk;
217  $V .= "<option value='$parent $folderPk'>";
218  } else {
219  $V .= "<option value='$folderPk'>";
220  }
221 
222  for ($i = 0; $i < $folderDepth; $i++) {
223  $V .= "&nbsp;&nbsp;";
224  }
225 
226  $Name = trim($row['folder_name']);
227  if ($Name == "") {
228  $Name = "[default]";
229  }
230  $V .= htmlentities($Name, ENT_HTML5 | ENT_QUOTES);
231  $V .= "</option>\n";
232  }
233  return($V);
234 } // FolderListOption()
235 
247 function FolderGetName($FolderPk,$Top=-1)
248 {
249  global $PG_CONN;
250  if ($Top == -1) {
251  $Top = FolderGetTop();
252  }
253  $sql = "SELECT folder_name,foldercontents.parent_fk FROM folder
254  LEFT JOIN foldercontents ON foldercontents_mode = ".FolderDao::MODE_FOLDER."
255  AND child_id = '$FolderPk'
256  WHERE folder_pk = '$FolderPk'
257  LIMIT 1;";
258  $result = pg_query($PG_CONN, $sql);
259  DBCheckResult($result, $sql, __FILE__, __LINE__);
260  $row = pg_fetch_assoc($result);
261  $Parent = $row['parent_fk'];
262  $Name = $row['folder_name'];
263  if (! empty($Parent) && ($FolderPk != $Top)) {
264  $Name = FolderGetName($Parent,$Top) . "/" . $Name;
265  }
266  return($Name);
267 }
268 
269 
278 function FolderGetFromUpload($Uploadpk, $Folder = -1, $Stop = -1)
279 {
280  global $PG_CONN;
281  if (empty($PG_CONN)) {
282  return;
283  }
284  if (empty($Uploadpk)) {
285  return;
286  }
287  if ($Stop == - 1) {
288  $Stop = FolderGetTop();
289  }
290  if ($Folder == $Stop) {
291  return;
292  }
293 
294  $sql = "";
295  $Parm = "";
296  if ($Folder < 0) {
297  /* Mode 2 means child_id is an upload_pk */
298  $Parm = $Uploadpk;
299  $sql = "SELECT foldercontents.parent_fk,folder_name FROM foldercontents
300  INNER JOIN folder ON foldercontents.parent_fk = folder.folder_pk
301  AND foldercontents.foldercontents_mode = " . FolderDao::MODE_UPLOAD."
302  WHERE foldercontents.child_id = $Parm LIMIT 1;";
303  } else {
304  /* Mode 1 means child_id is a folder_pk */
305  $Parm = $Folder;
306  $sql = "SELECT foldercontents.parent_fk,folder_name FROM foldercontents
307  INNER JOIN folder ON foldercontents.parent_fk = folder.folder_pk
308  AND foldercontents.foldercontents_mode = 1
309  WHERE foldercontents.child_id = $Parm LIMIT 1;";
310  }
311  $result = pg_query($PG_CONN, $sql);
312  DBCheckResult($result, $sql, __FILE__, __LINE__);
313  $R = pg_fetch_assoc($result);
314  if (empty($R['parent_fk'])) {
315  pg_free_result($result);
316  return;
317  }
318  $V = array();
319  $V['folder_pk'] = $R['parent_fk'];
320  $V['folder_name'] = $R['folder_name'];
321  if ($R['parent_fk'] != 0) {
322  $List = FolderGetFromUpload($Uploadpk, $R['parent_fk'],$Stop);
323  }
324  if (empty($List)) {
325  $List = array();
326  }
327  $List[] = $V;
328  pg_free_result($result);
329  return($List);
330 } // FolderGetFromUpload()
331 
332 
345 function FolderListUploads_perm($ParentFolder, $perm)
346 {
347  global $PG_CONN;
348 
349  if (empty($PG_CONN)) {
350  return;
351  }
352  if (empty($ParentFolder)) {
353  return;
354  }
355  if ($ParentFolder == "-1") {
356  $ParentFolder = GetUserRootFolder();
357  }
358  $groupId = Auth::getGroupId();
359  /* @var $uploadDao UploadDao */
360  $uploadDao = $GLOBALS['container']->get('dao.upload');
361  $List=array();
362 
363  /* Get list of uploads under $ParentFolder */
364  /* mode 2 = upload_fk */
365  $sql = "SELECT upload_pk, upload_desc, upload_ts, upload_filename
366  FROM foldercontents,upload
367  INNER JOIN uploadtree ON upload_fk = upload_pk AND upload.pfile_fk = uploadtree.pfile_fk AND parent IS NULL AND lft IS NOT NULL
368  WHERE foldercontents.parent_fk = '$ParentFolder'
369  AND foldercontents.foldercontents_mode = ".FolderDao::MODE_UPLOAD."
370  AND foldercontents.child_id = upload.upload_pk
371  ORDER BY upload_filename,upload_pk;";
372  $result = pg_query($PG_CONN, $sql);
373  DBCheckResult($result, $sql, __FILE__, __LINE__);
374  while ($R = pg_fetch_assoc($result)) {
375  if (empty($R['upload_pk'])) {
376  continue;
377  }
378  if ($perm == Auth::PERM_READ &&
379  ! $uploadDao->isAccessible($R['upload_pk'], $groupId)) {
380  continue;
381  }
382  if ($perm == Auth::PERM_WRITE &&
383  ! $uploadDao->isEditable($R['upload_pk'], $groupId)) {
384  continue;
385  }
386 
387  $New = array();
388  $New['upload_pk'] = $R['upload_pk'];
389  $New['upload_desc'] = $R['upload_desc'];
390  $New['upload_ts'] = Convert2BrowserTime(substr($R['upload_ts'], 0, 19));
391  $New['name'] = $R['upload_filename'];
392  $List[] = $New;
393  }
394  pg_free_result($result);
395  return($List);
396 } // FolderListUploads_perm()
397 
412 function FolderListUploadsRecurse($ParentFolder=-1, $FolderPath = '',
413  $perm = Auth::PERM_READ)
414 {
415  global $PG_CONN;
416  if (empty($PG_CONN)) {
417  return array();
418  }
419  if (empty($ParentFolder)) {
420  return array();
421  }
422  if ($perm != Auth::PERM_READ && $perm != Auth::PERM_WRITE) {
423  return array();
424  }
425  if ($ParentFolder == "-1") {
426  $ParentFolder = FolderGetTop();
427  }
428  $groupId = Auth::getGroupId();
429  /* @var $uploadDao UploadDao */
430  $uploadDao = $GLOBALS['container']->get('dao.upload');
431  $List=array();
432 
433  /* Get list of uploads */
434  /* mode 1<<1 = upload_fk */
435  $sql = "SELECT upload_pk, upload_desc, ufile_name, folder_name FROM folder,foldercontents,uploadtree, upload
436  WHERE
437  foldercontents.parent_fk = '$ParentFolder'
438  AND foldercontents.foldercontents_mode = ". FolderDao::MODE_UPLOAD ."
439  AND foldercontents.child_id = upload.upload_pk
440  AND folder.folder_pk = $ParentFolder
441  AND uploadtree.upload_fk = upload.upload_pk
442  AND uploadtree.parent is null
443  ORDER BY uploadtree.ufile_name,upload.upload_desc";
444  $result = pg_query($PG_CONN, $sql);
445  DBCheckResult($result, $sql, __FILE__, __LINE__);
446  while ($R = pg_fetch_assoc($result)) {
447  if (empty($R['upload_pk'])) {
448  continue;
449  }
450  if ($perm == Auth::PERM_READ &&
451  ! $uploadDao->isAccessible($R['upload_pk'], $groupId)) {
452  continue;
453  }
454  if ($perm == Auth::PERM_WRITE &&
455  ! $uploadDao->isEditable($R['upload_pk'], $groupId)) {
456  continue;
457  }
458 
459  $New = array();
460  $New['upload_pk'] = $R['upload_pk'];
461  $New['upload_desc'] = $R['upload_desc'];
462  $New['name'] = $R['ufile_name'];
463  $New['folder'] = $FolderPath . "/" . $R['folder_name'];
464  $List[] = $New;
465  }
466  pg_free_result($result);
467 
468  /* Get list of subfolders and recurse */
469  /* mode 1<<0 = folder_pk */
470  $sql = "SELECT A.child_id AS id,B.folder_name AS folder,B.folder_name AS subfolder
471  FROM foldercontents AS A
472  INNER JOIN folder AS B ON A.parent_fk = B.folder_pk
473  AND A.foldercontents_mode = ". FolderDao::MODE_FOLDER ."
474  AND A.parent_fk = '$ParentFolder'
475  AND B.folder_pk = $ParentFolder
476  ORDER BY B.folder_name;";
477  $result = pg_query($PG_CONN, $sql);
478  DBCheckResult($result, $sql, __FILE__, __LINE__);
479  while ($R = pg_fetch_assoc($result)) {
480  if (empty($R['id'])) {
481  continue;
482  }
483  /* RECURSE! */
484  $SubList = FolderListUploadsRecurse($R['id'], $FolderPath . "/" . $R['folder'], $perm);
485  $List = array_merge($List,$SubList);
486  }
487  pg_free_result($result);
488  /* Return findings */
489  return($List);
490 } // FolderListUploadsRecurse()
491 
492 
509 function GetFolderArray($RootFolder, &$FolderArray)
510 {
511  global $PG_CONN;
512 
513  if ($RootFolder == "-1") {
514  $RootFolder = FolderGetTop();
515  }
516  if (empty($RootFolder)) {
517  return $FolderArray;
518  }
519 
520  /* Load this folder's name */
521  $sql = "SELECT folder_name, folder_pk FROM folder WHERE folder_pk=$RootFolder LIMIT 1;";
522  $result = pg_query($PG_CONN, $sql);
523  DBCheckResult($result, $sql, __FILE__, __LINE__);
524  $row = pg_fetch_assoc($result);
525  pg_free_result($result);
526 
527  $Name = trim($row['folder_name']);
528  $FolderArray[$row['folder_pk']] = $row['folder_name'];
529 
530  /* Load any subfolders */
531  $sql = "SELECT folder.folder_pk, folder.folder_name,
532  foldercontents.parent_fk
533  FROM folder, foldercontents
534  WHERE foldercontents.foldercontents_mode = ".FolderDao::MODE_FOLDER."
535  AND foldercontents.parent_fk =$RootFolder
536  AND foldercontents.child_id = folder.folder_pk
537  AND folder.folder_pk is not null
538  ORDER BY folder_name";
539  $result = pg_query($PG_CONN, $sql);
540  DBCheckResult($result, $sql, __FILE__, __LINE__);
541  if (pg_num_rows($result) > 0) {
542  while ($row = pg_fetch_assoc($result)) {
543  GetFolderArray($row['folder_pk'], $FolderArray);
544  }
545  }
546  pg_free_result($result);
547 }
548 
557 function ContainExcludeString($FilePath, $ExcludingText)
558 {
559  $excluding_length = 0;
560  $excluding_flag = 0; // 1: exclude 0: not exclude
561  if ($ExcludingText) {
562  $excluding_length = strlen($ExcludingText);
563  }
564 
565  /* filepath contains 'xxxx/', '/xxxx/', 'xxxx', '/xxxx' */
566  if ($excluding_length > 0 && strstr($FilePath, $ExcludingText)) {
567  $excluding_flag = 1;
568  /* filepath does not contain 'xxxx/' */
569  if ('/' != $ExcludingText[0] && '/' == $ExcludingText[$excluding_length - 1] &&
570  ! strstr($FilePath, '/'.$ExcludingText)) {
571  $excluding_flag = 0;
572  }
573  }
574  return $excluding_flag;
575 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
DBCheckResult($result, $sql, $filenm, $lineno)
Check the postgres result for unexpected errors. If found, treat them as fatal.
Definition: common-db.php:189
GetSingleRec($Table, $Where="")
Retrieve a single database record.
Definition: common-db.php:91
ContainExcludeString($FilePath, $ExcludingText)
Check if one file path contains an excluding text.
FolderGetName($FolderPk, $Top=-1)
Given a folder_pk, return the full path to this folder.
GetUserRootFolder()
Get the top-of-tree folder_pk for the current user. Fail if there is no user session.
FolderListOption($ParentFolder, $Depth, $IncludeTop=1, $SelectId=-1, $linkParent=false, $OldParent=0)
Create the folder tree, using OPTION tags.
GetFolderArray($RootFolder, &$FolderArray)
Get an array of all the folders from a $RootFolder on down.
FolderListUploadsRecurse($ParentFolder=-1, $FolderPath='', $perm=Auth::PERM_READ)
Get uploads and folder info, starting from $ParentFolder.
GetFolderFromItem($upload_pk="", $uploadtree_pk="")
Find what folder an item is in.
FolderGetTop()
DEPRECATED! Find the top-of-tree folder_pk for the current user.
FolderGetFromUpload($Uploadpk, $Folder=-1, $Stop=-1)
DEPRECATED! Given an upload number, return the folder path in an array containing folder_pk and name.
Folder2Path($folder_pk)
Return an array of folder_pk, folder_name from the users.root_folder_fk to $folder_pk.
FolderListUploads_perm($ParentFolder, $perm)
Returns an array of uploads in a folder.
Convert2BrowserTime($server_time)
Convert the server time to browser time.
Definition: common-ui.php:312
char * trim(char *ptext)
Trimming whitespace.
Definition: fossconfig.c:690
#define PERM_WRITE
Read-Write permission.
Definition: libfossology.h:33
#define PERM_READ
Read-only permission.
Definition: libfossology.h:32
foreach($Options as $Option=> $OptVal) if(0==$reference_flag &&0==$nomos_flag) $PG_CONN