FOSSology  4.4.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  if ($ParentFolder == "-1") {
181  $ParentFolder = FolderGetTop();
182  }
183  if (empty($ParentFolder)) {
184  return;
185  }
186  global $PG_CONN;
187  if (empty($PG_CONN)) {
188  return;
189  }
190  $V = "";
191 
192  if (($Depth != 0) || $IncludeTop) {
193  if ($ParentFolder == $SelectId) {
194  $V .= "<option value='$ParentFolder' SELECTED>";
195  } elseif ($linkParent) {
196  if (empty($OldParent)) {
197  $OldParent = 0;
198  }
199  $V .= "<option value='$OldParent $ParentFolder'>";
200  } else {
201  $V .= "<option value='$ParentFolder'>";
202  }
203  if ($Depth != 0) {
204  $V .= "&nbsp;&nbsp;";
205  }
206  for ($i=1; $i < $Depth; $i++) {
207  $V .= "&nbsp;&nbsp;";
208  }
209 
210  /* Load this folder's name */
211  $sql = "SELECT folder_name FROM folder WHERE folder_pk=$ParentFolder LIMIT 1;";
212  $result = pg_query($PG_CONN, $sql);
213  DBCheckResult($result, $sql, __FILE__, __LINE__);
214  $row = pg_fetch_assoc($result);
215  $Name = trim($row['folder_name']);
216  if ($Name == "") {
217  $Name = "[default]";
218  }
219 
220  /* Load any subfolders */
221  /* Now create the HTML */
222  $V .= htmlentities($Name, ENT_HTML5 | ENT_QUOTES);
223  $V .= "</option>\n";
224  }
225  /* Load any subfolders */
226  $sql = "SELECT folder.folder_pk, folder.folder_name AS name,
227  folder.folder_desc AS description,
228  foldercontents.parent_fk AS parent,
229  foldercontents.foldercontents_mode,
230  NULL AS ts, NULL AS upload_pk, NULL AS pfile_fk, NULL AS ufile_mode
231  FROM folder, foldercontents
232  WHERE foldercontents.foldercontents_mode = ".FolderDao::MODE_FOLDER."
233  AND foldercontents.parent_fk =$ParentFolder
234  AND foldercontents.child_id = folder.folder_pk
235  AND folder.folder_pk is not null
236  ORDER BY name";
237  $result = pg_query($PG_CONN, $sql);
238  DBCheckResult($result, $sql, __FILE__, __LINE__);
239  if (pg_num_rows($result) > 0) {
240  $Hide = "";
241  if ($Depth > 0) {
242  $Hide = "style='display:none;'";
243  }
244  while ($row = pg_fetch_assoc($result)) {
245  $V .= FolderListOption($row['folder_pk'], $Depth+1,$IncludeTop,$SelectId,$linkParent,$row['parent']);
246  }
247  }
248  pg_free_result($result);
249  return($V);
250 } // FolderListOption()
251 
263 function FolderGetName($FolderPk,$Top=-1)
264 {
265  global $PG_CONN;
266  if ($Top == -1) {
267  $Top = FolderGetTop();
268  }
269  $sql = "SELECT folder_name,foldercontents.parent_fk FROM folder
270  LEFT JOIN foldercontents ON foldercontents_mode = ".FolderDao::MODE_FOLDER."
271  AND child_id = '$FolderPk'
272  WHERE folder_pk = '$FolderPk'
273  LIMIT 1;";
274  $result = pg_query($PG_CONN, $sql);
275  DBCheckResult($result, $sql, __FILE__, __LINE__);
276  $row = pg_fetch_assoc($result);
277  $Parent = $row['parent_fk'];
278  $Name = $row['folder_name'];
279  if (! empty($Parent) && ($FolderPk != $Top)) {
280  $Name = FolderGetName($Parent,$Top) . "/" . $Name;
281  }
282  return($Name);
283 }
284 
285 
294 function FolderGetFromUpload($Uploadpk, $Folder = -1, $Stop = -1)
295 {
296  global $PG_CONN;
297  if (empty($PG_CONN)) {
298  return;
299  }
300  if (empty($Uploadpk)) {
301  return;
302  }
303  if ($Stop == - 1) {
304  $Stop = FolderGetTop();
305  }
306  if ($Folder == $Stop) {
307  return;
308  }
309 
310  $sql = "";
311  $Parm = "";
312  if ($Folder < 0) {
313  /* Mode 2 means child_id is an upload_pk */
314  $Parm = $Uploadpk;
315  $sql = "SELECT foldercontents.parent_fk,folder_name FROM foldercontents
316  INNER JOIN folder ON foldercontents.parent_fk = folder.folder_pk
317  AND foldercontents.foldercontents_mode = " . FolderDao::MODE_UPLOAD."
318  WHERE foldercontents.child_id = $Parm LIMIT 1;";
319  } else {
320  /* Mode 1 means child_id is a folder_pk */
321  $Parm = $Folder;
322  $sql = "SELECT foldercontents.parent_fk,folder_name FROM foldercontents
323  INNER JOIN folder ON foldercontents.parent_fk = folder.folder_pk
324  AND foldercontents.foldercontents_mode = 1
325  WHERE foldercontents.child_id = $Parm LIMIT 1;";
326  }
327  $result = pg_query($PG_CONN, $sql);
328  DBCheckResult($result, $sql, __FILE__, __LINE__);
329  $R = pg_fetch_assoc($result);
330  if (empty($R['parent_fk'])) {
331  pg_free_result($result);
332  return;
333  }
334  $V = array();
335  $V['folder_pk'] = $R['parent_fk'];
336  $V['folder_name'] = $R['folder_name'];
337  if ($R['parent_fk'] != 0) {
338  $List = FolderGetFromUpload($Uploadpk, $R['parent_fk'],$Stop);
339  }
340  if (empty($List)) {
341  $List = array();
342  }
343  $List[] = $V;
344  pg_free_result($result);
345  return($List);
346 } // FolderGetFromUpload()
347 
348 
361 function FolderListUploads_perm($ParentFolder, $perm)
362 {
363  global $PG_CONN;
364 
365  if (empty($PG_CONN)) {
366  return;
367  }
368  if (empty($ParentFolder)) {
369  return;
370  }
371  if ($ParentFolder == "-1") {
372  $ParentFolder = GetUserRootFolder();
373  }
374  $groupId = Auth::getGroupId();
375  /* @var $uploadDao UploadDao */
376  $uploadDao = $GLOBALS['container']->get('dao.upload');
377  $List=array();
378 
379  /* Get list of uploads under $ParentFolder */
380  /* mode 2 = upload_fk */
381  $sql = "SELECT upload_pk, upload_desc, upload_ts, upload_filename
382  FROM foldercontents,upload
383  INNER JOIN uploadtree ON upload_fk = upload_pk AND upload.pfile_fk = uploadtree.pfile_fk AND parent IS NULL AND lft IS NOT NULL
384  WHERE foldercontents.parent_fk = '$ParentFolder'
385  AND foldercontents.foldercontents_mode = ".FolderDao::MODE_UPLOAD."
386  AND foldercontents.child_id = upload.upload_pk
387  ORDER BY upload_filename,upload_pk;";
388  $result = pg_query($PG_CONN, $sql);
389  DBCheckResult($result, $sql, __FILE__, __LINE__);
390  while ($R = pg_fetch_assoc($result)) {
391  if (empty($R['upload_pk'])) {
392  continue;
393  }
394  if ($perm == Auth::PERM_READ &&
395  ! $uploadDao->isAccessible($R['upload_pk'], $groupId)) {
396  continue;
397  }
398  if ($perm == Auth::PERM_WRITE &&
399  ! $uploadDao->isEditable($R['upload_pk'], $groupId)) {
400  continue;
401  }
402 
403  $New = array();
404  $New['upload_pk'] = $R['upload_pk'];
405  $New['upload_desc'] = $R['upload_desc'];
406  $New['upload_ts'] = Convert2BrowserTime(substr($R['upload_ts'], 0, 19));
407  $New['name'] = $R['upload_filename'];
408  $List[] = $New;
409  }
410  pg_free_result($result);
411  return($List);
412 } // FolderListUploads_perm()
413 
428 function FolderListUploadsRecurse($ParentFolder=-1, $FolderPath = '',
429  $perm = Auth::PERM_READ)
430 {
431  global $PG_CONN;
432  if (empty($PG_CONN)) {
433  return array();
434  }
435  if (empty($ParentFolder)) {
436  return array();
437  }
438  if ($perm != Auth::PERM_READ && $perm = Auth::PERM_WRITE) {
439  return array();
440  }
441  if ($ParentFolder == "-1") {
442  $ParentFolder = FolderGetTop();
443  }
444  $groupId = Auth::getGroupId();
445  /* @var $uploadDao UploadDao */
446  $uploadDao = $GLOBALS['container']->get('dao.upload');
447  $List=array();
448 
449  /* Get list of uploads */
450  /* mode 1<<1 = upload_fk */
451  $sql = "SELECT upload_pk, upload_desc, ufile_name, folder_name FROM folder,foldercontents,uploadtree, upload
452  WHERE
453  foldercontents.parent_fk = '$ParentFolder'
454  AND foldercontents.foldercontents_mode = ". FolderDao::MODE_UPLOAD ."
455  AND foldercontents.child_id = upload.upload_pk
456  AND folder.folder_pk = $ParentFolder
457  AND uploadtree.upload_fk = upload.upload_pk
458  AND uploadtree.parent is null
459  ORDER BY uploadtree.ufile_name,upload.upload_desc";
460  $result = pg_query($PG_CONN, $sql);
461  DBCheckResult($result, $sql, __FILE__, __LINE__);
462  while ($R = pg_fetch_assoc($result)) {
463  if (empty($R['upload_pk'])) {
464  continue;
465  }
466  if ($perm == Auth::PERM_READ &&
467  ! $uploadDao->isAccessible($R['upload_pk'], $groupId)) {
468  continue;
469  }
470  if ($perm == Auth::PERM_WRITE &&
471  ! $uploadDao->isEditable($R['upload_pk'], $groupId)) {
472  continue;
473  }
474 
475  $New = array();
476  $New['upload_pk'] = $R['upload_pk'];
477  $New['upload_desc'] = $R['upload_desc'];
478  $New['name'] = $R['ufile_name'];
479  $New['folder'] = $FolderPath . "/" . $R['folder_name'];
480  $List[] = $New;
481  }
482  pg_free_result($result);
483 
484  /* Get list of subfolders and recurse */
485  /* mode 1<<0 = folder_pk */
486  $sql = "SELECT A.child_id AS id,B.folder_name AS folder,B.folder_name AS subfolder
487  FROM foldercontents AS A
488  INNER JOIN folder AS B ON A.parent_fk = B.folder_pk
489  AND A.foldercontents_mode = ". FolderDao::MODE_FOLDER ."
490  AND A.parent_fk = '$ParentFolder'
491  AND B.folder_pk = $ParentFolder
492  ORDER BY B.folder_name;";
493  $result = pg_query($PG_CONN, $sql);
494  DBCheckResult($result, $sql, __FILE__, __LINE__);
495  while ($R = pg_fetch_assoc($result)) {
496  if (empty($R['id'])) {
497  continue;
498  }
499  /* RECURSE! */
500  $SubList = FolderListUploadsRecurse($R['id'], $FolderPath . "/" . $R['folder'], $perm);
501  $List = array_merge($List,$SubList);
502  }
503  pg_free_result($result);
504  /* Return findings */
505  return($List);
506 } // FolderListUploadsRecurse()
507 
508 
525 function GetFolderArray($RootFolder, &$FolderArray)
526 {
527  global $PG_CONN;
528 
529  if ($RootFolder == "-1") {
530  $RootFolder = FolderGetTop();
531  }
532  if (empty($RootFolder)) {
533  return $FolderArray;
534  }
535 
536  /* Load this folder's name */
537  $sql = "SELECT folder_name, folder_pk FROM folder WHERE folder_pk=$RootFolder LIMIT 1;";
538  $result = pg_query($PG_CONN, $sql);
539  DBCheckResult($result, $sql, __FILE__, __LINE__);
540  $row = pg_fetch_assoc($result);
541  pg_free_result($result);
542 
543  $Name = trim($row['folder_name']);
544  $FolderArray[$row['folder_pk']] = $row['folder_name'];
545 
546  /* Load any subfolders */
547  $sql = "SELECT folder.folder_pk, folder.folder_name,
548  foldercontents.parent_fk
549  FROM folder, foldercontents
550  WHERE foldercontents.foldercontents_mode = ".FolderDao::MODE_FOLDER."
551  AND foldercontents.parent_fk =$RootFolder
552  AND foldercontents.child_id = folder.folder_pk
553  AND folder.folder_pk is not null
554  ORDER BY folder_name";
555  $result = pg_query($PG_CONN, $sql);
556  DBCheckResult($result, $sql, __FILE__, __LINE__);
557  if (pg_num_rows($result) > 0) {
558  while ($row = pg_fetch_assoc($result)) {
559  GetFolderArray($row['folder_pk'], $FolderArray);
560  }
561  }
562  pg_free_result($result);
563 }
564 
573 function ContainExcludeString($FilePath, $ExcludingText)
574 {
575  $excluding_length = 0;
576  $excluding_flag = 0; // 1: exclude 0: not exclude
577  if ($ExcludingText) {
578  $excluding_length = strlen($ExcludingText);
579  }
580 
581  /* filepath contains 'xxxx/', '/xxxx/', 'xxxx', '/xxxx' */
582  if ($excluding_length > 0 && strstr($FilePath, $ExcludingText)) {
583  $excluding_flag = 1;
584  /* filepath does not contain 'xxxx/' */
585  if ('/' != $ExcludingText[0] && '/' == $ExcludingText[$excluding_length - 1] &&
586  ! strstr($FilePath, '/'.$ExcludingText)) {
587  $excluding_flag = 0;
588  }
589  }
590  return $excluding_flag;
591 }
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:187
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