public function Output() { $V = ""; /* If this is a POST, then process the request. */ $groupname = GetParm('groupname', PARM_TEXT); if (!empty($groupname)) { try { /* @var $userDao UserDao */ $userDao = $GLOBALS['container']->get('dao.user'); $groupId = $userDao->addGroup($groupname); $userDao->addGroupMembership($groupId, Auth::getUserId()); $text = _("Group"); $text1 = _("added"); $this->vars['message'] = "{$text} {$groupname} {$text1}."; } catch (Exception $e) { $this->vars['message'] = $e->getMessage(); } } /* Build HTML form */ $text = _("Add a Group"); $V .= "<h4>{$text}</h4>\n"; $V .= "<form name='formy' method='POST' action=" . Traceback_uri() . "?mod=group_add>\n"; $Val = htmlentities(GetParm('groupname', PARM_TEXT), ENT_QUOTES); $text = _("Enter the groupname:"); $V .= "{$text}\n"; $V .= "<input type='text' value='{$Val}' name='groupname' size=20>\n"; $text = _("Add"); $V .= "<input type='submit' value='{$text}'>\n"; $V .= "</form>\n"; return $V; }
/** * \brief queue the job * * \param * \returns status string **/ function QueueJob() { global $SysConf; /* Find all the maintagent options specified by the user. * They look like _REQUEST["a"] = "a", _REQUEST["b"]="b", ... */ $options = "-"; foreach ($_REQUEST as $key => $value) { if ($key == $value) { $options .= $value; } } /* Create the maintenance job */ $user_pk = Auth::getUserId(); $groupId = Auth::getGroupId(); $job_pk = JobAddJob($user_pk, $groupId, "Maintenance"); if (empty($job_pk) || $job_pk < 0) { return _("Failed to insert job record"); } $jq_pk = JobQueueAdd($job_pk, "maintagent", NULL, NULL, NULL, NULL, $options); if (empty($jq_pk)) { return _("Failed to insert task 'Maintenance' into job queue"); } /* Tell the scheduler to check the queue. */ $success = fo_communicate_with_scheduler("database", $output, $error_msg); if (!$success) { return $error_msg . "\n" . $output; } return _("The maintenance job has been queued"); }
/** * @param Request $request * @return Response */ protected function handle(Request $request) { $userId = Auth::getUserId(); $vars = array(); /** @var UserDao $userDao */ $userDao = $this->getObject('dao.user'); $groupMap = $userDao->getDeletableAdminGroupMap($userId, $_SESSION[Auth::USER_LEVEL]); $groupId = $request->get('grouppk'); if (!empty($groupId)) { try { $userDao->deleteGroup($groupId); $vars['message'] = _("Group") . ' ' . $groupMap[$groupId] . ' ' . _("deleted") . '.'; unset($groupMap[$groupId]); } catch (\Exception $e) { $vars['message'] = $e->getMessage(); } } if (empty($groupMap)) { $vars['content'] = _("You have no groups you can delete."); return $this->render('include/base.html.twig', $this->mergeWithDefault($vars)); } $vars['groupMap'] = $groupMap; $vars['uri'] = Traceback_uri() . "?mod=group_delete"; $vars['groupMap'] = $groupMap; return $this->render('admin_group_delete.html.twig', $this->mergeWithDefault($vars)); }
/** * \brief Delete * Creates a job to detele the folder * * \param $folderpk - the folder_pk to remove * \return NULL on success, string on failure. */ function Delete($folderpk, $Depends = NULL) { /* Can't remove top folder */ if ($folderpk == FolderGetTop()) { $text = _("Can Not Delete Root Folder"); return $text; } /* Get the folder's name */ $FolderName = FolderGetName($folderpk); /* Prepare the job: job "Delete" */ $userId = Auth::getUserId(); $groupId = Auth::getGroupId(); $jobpk = JobAddJob($userId, $groupId, "Delete Folder: {$FolderName}"); if (empty($jobpk) || $jobpk < 0) { $text = _("Failed to create job record"); return $text; } /* Add job: job "Delete" has jobqueue item "delagent" */ $jqargs = "DELETE FOLDER {$folderpk}"; $jobqueuepk = JobQueueAdd($jobpk, "delagent", $jqargs, NULL, NULL); if (empty($jobqueuepk)) { $text = _("Failed to place delete in job queue"); return $text; } /* Tell the scheduler to check the queue. */ $success = fo_communicate_with_scheduler("database", $output, $error_msg); if (!$success) { return $error_msg . "\n" . $output; } return NULL; }
protected function getJobAndJobqueue($groupId, $upload, $addUploads) { $uploadId = $upload->getId(); $readMeOssAgent = plugin_find('agent_readmeoss'); $userId = Auth::getUserId(); $jqCmdArgs = $readMeOssAgent->uploadsAdd($addUploads); $dbManager = $this->getObject('db.manager'); $sql = 'SELECT jq_pk,job_pk FROM jobqueue, job ' . 'WHERE jq_job_fk=job_pk AND jq_type=$1 AND job_group_fk=$4 AND job_user_fk=$3 AND jq_args=$2 AND jq_endtime IS NULL'; $params = array($readMeOssAgent->AgentName, $uploadId, $userId, $groupId); $log = __METHOD__; if ($jqCmdArgs) { $sql .= ' AND jq_cmd_args=$5'; $params[] = $jqCmdArgs; $log .= '.args'; } else { $sql .= ' AND jq_cmd_args IS NULL'; } $scheduled = $dbManager->getSingleRow($sql, $params, $log); if (!empty($scheduled)) { return array($scheduled['job_pk'], $scheduled['jq_pk']); } $jobId = JobAddJob($userId, $groupId, $upload->getFilename(), $uploadId); $error = ""; $jobQueueId = $readMeOssAgent->AgentAdd($jobId, $uploadId, $error, array(), $jqCmdArgs); if ($jobQueueId < 0) { throw new Exception(_("Cannot schedule") . ": " . $error); } return array($jobId, $jobQueueId); }
/** * @param Request $request * @return Response */ protected function handle(Request $request) { $userId = Auth::getUserId(); $vars = array(); $folderContentId = intval($request->get('foldercontent')); $parentFolderId = intval($request->get('toFolder')); if ($folderContentId && $parentFolderId && $request->get('copy')) { try { $this->folderDao->copyContent($folderContentId, $parentFolderId); } catch (Exception $ex) { $vars['message'] = $ex->getMessage(); } } elseif ($folderContentId && $parentFolderId) { try { $this->folderDao->moveContent($folderContentId, $parentFolderId); } catch (Exception $ex) { $vars['message'] = $ex->getMessage(); } } $rootFolderId = $this->folderDao->getRootFolder($userId)->getId(); /* @var $uiFolderNav FolderNav */ $uiFolderNav = $this->getObject('ui.folder.nav'); $vars['folderTree'] = $uiFolderNav->showFolderTree($rootFolderId); $vars['folderStructure'] = $this->folderDao->getFolderStructure($rootFolderId); return $this->render('admin_content_move.html.twig', $this->mergeWithDefault($vars)); }
/** * \brief Given a folder_pk, add a job. * \param $uploadpk - the upload(upload_id) you want to delete * \param $Depends - Depends is not used for now * * \return NULL on success, string on failure. */ function Delete($uploadpk, $Depends = NULL) { global $SysConf; /* Prepare the job: job "Delete" */ $user_pk = Auth::getUserId(); $group_pk = Auth::getGroupId(); $jobpk = JobAddJob($user_pk, $group_pk, "Delete", $uploadpk); if (empty($jobpk) || $jobpk < 0) { $text = _("Failed to create job record"); return $text; } /* Add job: job "Delete" has jobqueue item "delagent" */ $jqargs = "DELETE UPLOAD {$uploadpk}"; $jobqueuepk = JobQueueAdd($jobpk, "delagent", $jqargs, NULL, NULL); if (empty($jobqueuepk)) { $text = _("Failed to place delete in job queue"); return $text; } /* Tell the scheduler to check the queue. */ $success = fo_communicate_with_scheduler("database", $output, $error_msg); if (!$success) { $error_msg = _("Is the scheduler running? Your jobs have been added to job queue."); $URL = Traceback_uri() . "?mod=showjobs&upload={$uploadpk} "; $LinkText = _("View Jobs"); $msg = "{$error_msg} <a href={$URL}>{$LinkText}</a>"; return $msg; } return NULL; }
/** * @brief Allow user to change their account settings (users db table). * If the user is an Admin, they can change settings for any user.\n * This is called in the following circumstances:\n * 1) User clicks on Admin > Edit User Account\n * 2) User has chosen a user to edit from the 'userid' select list \n * 3) User hit submit to update user data\n */ protected function handle(Request $request) { /* Is the session owner an admin? */ $user_pk = Auth::getUserId(); $SessionUserRec = $this->GetUserRec($user_pk); $SessionIsAdmin = $this->IsSessionAdmin($SessionUserRec); $user_pk_to_modify = intval($request->get('user_pk')); if (!($SessionIsAdmin or empty($user_pk_to_modify) or $user_pk == $user_pk_to_modify)) { $vars['content'] = _("Your request is not valid."); return $this->render('include/base.html.twig', $this->mergeWithDefault($vars)); } $vars = array('refreshUri' => Traceback_uri() . "?mod=" . self::NAME); /* If this is a POST (the submit button was clicked), then process the request. */ $BtnText = $request->get('UpdateBtn'); if (!empty($BtnText)) { /* Get the form data to in an associated array */ $UserRec = $this->CreateUserRec($request, ""); $rv = $this->UpdateUser($UserRec, $SessionIsAdmin); if (empty($rv)) { // Successful db update $vars['message'] = "User {$UserRec['user_name']} updated."; /* Reread the user record as update verification */ $UserRec = $this->CreateUserRec($request, $UserRec['user_pk']); } else { $vars['message'] = $rv; } } else { $NewUserpk = intval($request->get('newuser')); $UserRec = empty($NewUserpk) ? $this->CreateUserRec($request, $user_pk) : $this->CreateUserRec($request, $NewUserpk); } /* display the edit form with the requested user data */ $vars = array_merge($vars, $this->DisplayForm($UserRec, $SessionIsAdmin)); $vars['userId'] = $UserRec['user_pk']; return $this->render('user_edit.html.twig', $this->mergeWithDefault($vars)); }
protected function handleUpload(Request $request) { $folderId = intval($request->get(self::FOLDER_PARAMETER_NAME)); $description = stripslashes($request->get(self::DESCRIPTION_INPUT_NAME)); $description = $this->basicShEscaping($description); $getUrlThatMightIncludeSpaces = trim($request->get(self::GETURL_PARAM)); $getURL = str_replace(" ", "%20", $getUrlThatMightIncludeSpaces); if (empty($getURL)) { return array(false, _("Invalid URL"), $description); } if (preg_match("@^((http)|(https)|(ftp))://([[:alnum:]]+)@i", $getURL) != 1) { return array(false, _("Invalid URL"), $description); } $getUrl = $this->basicShEscaping($getUrl); $name = $request->get(self::NAME_PARAM); if (empty($name)) { $name = basename($getURL); } $shortName = basename($name); if (empty($shortName)) { $shortName = $name; } /* Create an upload record. */ $mode = 1 << 2; // code for "it came from wget" $userId = Auth::getUserId(); $groupId = Auth::getGroupId(); $public = $request->get('public'); $publicPermission = $public == self::PUBLIC_ALL ? Auth::PERM_READ : Auth::PERM_NONE; $uploadId = JobAddUpload($userId, $groupId, $shortName, $getURL, $description, $mode, $folderId, $publicPermission); if (empty($uploadId)) { $text = _("Failed to insert upload record"); return array(false, $text, $description); } $level = intval($request->get(self::LEVEL_PARAM)); if ($level < 0) { $level = 1; } /* first trim, then get rid of whitespaces before and after each comma letter */ $accept = preg_replace('/\\s*,\\s*/', ',', trim($request->get(self::ACCEPT_PARAM))); $accept = $this->basicShEscaping($accept); $reject = preg_replace('/\\s*,\\s*/', ',', trim($request->get(self::REJECT_PARAM))); $reject = $this->basicShEscaping($reject); /* Create the job: job "wget" */ $jobId = JobAddJob($userId, $groupId, "wget", $uploadId); if (empty($jobId) || $jobId < 0) { return array(false, _("Failed to insert job record"), $description); } $jqArgs = "{$uploadId} - {$getURL} -l {$level} "; if (!empty($accept)) { $jqArgs .= "-A {$accept} "; } $jqArgs .= empty($reject) ? "-R index.html* " : "-R {$reject},index.html* "; $jobqueueId = JobQueueAdd($jobId, "wget_agent", $jqArgs, NULL, NULL); if (empty($jobqueueId)) { return array(false, "Failed to insert task 'wget_agent' into job queue", $description); } $message = $this->postUploadAddJobs($request, $shortName, $uploadId, $jobId, $jobqueueId); return array(true, $message, $description); }
/** * \brief Find out who I am from my user record. * \returns user name */ protected function WhoAmI() { $user_pk = Auth::getUserId(); if (empty($user_pk)) { return _("You are not logged in"); } $userDao = $this->getObject('dao.user'); return $userDao->getUserName($user_pk); }
protected function getDefaultBucketPool() { $user_pk = Auth::getUserId(); if (empty($user_pk)) { return 0; } /* @var $dbManager DbManager */ $dbManager = $GLOBALS['container']->get('db.manager'); $usersRec = $dbManager->getSingleRow('SELECT default_bucketpool_fk FROM users WHERE user_pk=$1', array($user_pk)); return $usersRec['default_bucketpool_fk']; }
/** * \brief Generate the text for this plugin. */ public function Output() { /* If this is a POST, then process the request. */ $folder = GetParm('folder', PARM_INTEGER); if (!empty($folder)) { $userId = Auth::getUserId(); $sql = "SELECT folder_name FROM folder join users on (users.user_pk = folder.user_fk or users.user_perm = 10) where folder_pk = \$1 and users.user_pk = \$2;"; $Folder = $this->dbManager->getSingleRow($sql, array($folder, $userId), __METHOD__ . "GetRowWithFolderName"); if (!empty($Folder['folder_name'])) { $rc = $this->Delete($folder, $userId); if (empty($rc)) { /* Need to refresh the screen */ $text = _("Deletion of folder "); $text1 = _(" added to job queue"); $this->vars['message'] = $text . $Folder['folder_name'] . $text1; } else { $text = _("Deletion of "); $text1 = _(" failed: "); $this->vars['message'] = $text . $Folder['folder_name'] . $text1 . $rc; } } else { $text = _("Cannot delete this folder :: Permission denied"); $this->vars['message'] = $text; } } $V = "<form method='post'>\n"; // no url = this url $text = _("Select the folder to"); $text1 = _("delete"); $V .= "{$text} <em>{$text1}</em>.\n"; $V .= "<ul>\n"; $text = _("This will"); $text1 = _("delete"); $text2 = _("the folder, all subfolders, and all uploaded files stored within the folder!"); $V .= "<li>{$text} <em>{$text1}</em> {$text2}\n"; $text = _("Be very careful with your selection since you can delete a lot of work!"); $V .= "<li>{$text}\n"; $text = _("All analysis only associated with the deleted uploads will also be deleted."); $V .= "<li>{$text}\n"; $text = _("THERE IS NO UNDELETE. When you select something to delete, it will be removed from the database and file repository."); $V .= "<li>{$text}\n"; $V .= "</ul>\n"; $text = _("Select the folder to delete: "); $V .= "<P>{$text}\n"; $V .= "<select name='folder'>\n"; $text = _("select folder"); $V .= "<option value=''>[{$text}]</option>\n"; $V .= FolderListOption(-1, 0); $V .= "</select><P />\n"; $text = _("Delete"); $V .= "<input type='submit' value='{$text}'>\n"; $V .= "</form>\n"; return $V; }
/** * @param Request $request * @return Response */ protected function handle(Request $request) { $vars = array('licenseCount' => $this->licenseDao->getLicenseCount(), 'project' => _("FOSSology"), 'copyright' => _("Copyright (C) 2007-2014 Hewlett-Packard Development Company, L.P.<br>\nCopyright (C) 2014-2016 Siemens AG.")); if (Auth::isAdmin()) { $repositoryApi = new RepositoryApi(); $latestRelease = $repositoryApi->getLatestRelease(); $commits = $repositoryApi->getCommitsOfLastDays(30); $commit = empty($commits) ? '' : substr($commits[0]['sha'], 0, 6); $vars = array_merge($vars, array('latestVersion' => $latestRelease, 'lastestCommit' => $commit)); } return $this->render('about.html.twig', $this->mergeWithDefault($vars)); }
/** * @param int $jobId * @param int $uploadId * @param string $errorMsg * @param Request $request */ public function scheduleAgent($jobId, $uploadId, &$errorMsg, $request) { $reuseUploadPair = explode(',', $request->get(self::UPLOAD_TO_REUSE_SELECTOR_NAME), 2); if (count($reuseUploadPair) == 2) { list($reuseUploadId, $reuseGroupId) = $reuseUploadPair; } else { $errorMsg .= 'no reuse upload id given'; return -1; } $groupId = $request->get('groupId', Auth::getGroupId()); $reuseModeVal = $request->get('reuseMode'); $reuseMode = empty($reuseModeVal) ? 0 : 1; $this->createPackageLink($uploadId, $reuseUploadId, $groupId, $reuseGroupId, $reuseMode); return $this->doAgentAdd($jobId, $uploadId, $errorMsg, array("agent_adj2nest"), $uploadId); }
/** * * @param int $uploadTreeId * @param Request $request * @return int $jobQueueId */ private function getJobQueueId($uploadTreeId, Request $request) { $uploadEntry = $this->uploadDao->getUploadEntry($uploadTreeId); $uploadId = intval($uploadEntry['upload_fk']); $userId = Auth::getUserId(); $groupId = Auth::getGroupId(); if ($uploadId <= 0 || !$this->uploadDao->isAccessible($uploadId, $groupId)) { throw new Exception('permission denied'); } $bulkScope = $request->get('bulkScope'); switch ($bulkScope) { case 'u': $uploadTreeTable = $this->uploadDao->getUploadtreeTableName($uploadId); $topBounds = $this->uploadDao->getParentItemBounds($uploadId, $uploadTreeTable); $uploadTreeId = $topBounds->getItemId(); break; case 'f': if (!Isdir($uploadEntry['ufile_mode']) && !Iscontainer($uploadEntry['ufile_mode']) && !Isartifact($uploadEntry['ufile_mode'])) { $uploadTreeId = $uploadEntry['parent'] ?: $uploadTreeId; } break; default: throw new InvalidArgumentException('bad scope request'); } $refText = $request->get('refText'); $actions = $request->get('bulkAction'); $licenseRemovals = array(); foreach ($actions as $licenseAction) { $licenseRemovals[$licenseAction['licenseId']] = $licenseAction['action'] == 'remove'; } $bulkId = $this->licenseDao->insertBulkLicense($userId, $groupId, $uploadTreeId, $licenseRemovals, $refText); if ($bulkId <= 0) { throw new Exception('cannot insert bulk reference'); } $upload = $this->uploadDao->getUpload($uploadId); $uploadName = $upload->getFilename(); $job_pk = JobAddJob($userId, $groupId, $uploadName, $uploadId); /** @var DeciderJobAgentPlugin $deciderPlugin */ $deciderPlugin = plugin_find("agent_deciderjob"); $dependecies = array(array('name' => 'agent_monk_bulk', 'args' => $bulkId)); $conflictStrategyId = intval($request->get('forceDecision')); $errorMsg = ''; $jqId = $deciderPlugin->AgentAdd($job_pk, $uploadId, $errorMsg, $dependecies, $conflictStrategyId); if (!empty($errorMsg)) { throw new Exception(str_replace('<br>', "\n", $errorMsg)); } return $jqId; }
/** * @param Request $request * @return Response */ protected function handle(Request $request) { $userId = Auth::getUserId(); $vars = array(); $folderContentId = intval($request->get('foldercontent')); if ($folderContentId) { try { $this->folderDao->removeContent($folderContentId); } catch (Exception $ex) { $vars['message'] = $ex->getMessage(); } } $rootFolderId = $this->folderDao->getRootFolder($userId)->getId(); /* @var $uiFolderNav FolderNav */ $uiFolderNav = $GLOBALS['container']->get('ui.folder.nav'); $vars['folderTree'] = $uiFolderNav->showFolderTree($rootFolderId); return $this->render('admin_content_delete.html.twig', $this->mergeWithDefault($vars)); }
/** * \brief Display the loaded menu and plugins. */ public function Output() { global $Plugins; global $PG_CONN; $UploadPk = GetParm("upload", PARM_INTEGER); $Agent = GetParm("agent", PARM_STRING); if (empty($UploadPk) || empty($Agent)) { return new Response('missing parameter', Response::HTTP_BAD_REQUEST, array('Content-type' => 'text/plain')); } $sql = "SELECT upload_pk, upload_filename FROM upload WHERE upload_pk = '{$UploadPk}'"; $result = pg_query($PG_CONN, $sql); DBCheckResult($result, $sql, __FILE__, __LINE__); if (pg_num_rows($result) < 1) { $errMsg = __FILE__ . ":" . __LINE__ . " " . _("Upload") . " " . $UploadPk . " " . _("not found"); return new Response($errMsg, Response::HTTP_BAD_REQUEST, array('Content-type' => 'text/plain')); } $UploadRow = pg_fetch_assoc($result); $ShortName = $UploadRow['upload_filename']; pg_free_result($result); $user_pk = Auth::getUserId(); $group_pk = Auth::getGroupId(); $job_pk = JobAddJob($user_pk, $group_pk, $ShortName, $UploadPk); $Dependencies = array(); $P =& $Plugins[plugin_find_id($Agent)]; $rv = $P->AgentAdd($job_pk, $UploadPk, $ErrorMsg, $Dependencies); if ($rv <= 0) { $text = _("Scheduling of Agent(s) failed: "); return new Response($text . $rv . $ErrorMsg, Response::HTTP_BAD_REQUEST, array('Content-type' => 'text/plain')); } /** check if the scheudler is running */ $status = GetRunnableJobList(); $scheduler_msg = ""; if (empty($status)) { $scheduler_msg .= _("Is the scheduler running? "); } $URL = Traceback_uri() . "?mod=showjobs&upload={$UploadPk}"; /* Need to refresh the screen */ $text = _("Your jobs have been added to job queue."); $LinkText = _("View Jobs"); $msg = "{$scheduler_msg}" . "{$text} <a href={$URL}>{$LinkText}</a>"; $this->vars['message'] = $msg; return new Response($msg, Response::HTTP_OK, array('Content-type' => 'text/plain')); }
protected function handle(Request $request) { $folderId = intval($request->get('folder')); /* @var $folderDao FolderDao */ $folderDao = $this->getObject('dao.folder'); $results = array(); $childFolders = $folderDao->getFolderChildFolders($folderId); foreach ($childFolders as $folder) { $results[$folder['foldercontents_pk']] = '/' . $folder['folder_name']; } $childUploads = $folderDao->getFolderChildUploads($folderId, Auth::getGroupId()); foreach ($childUploads as $upload) { $results[$upload['foldercontents_pk']] = $upload['upload_filename']; } if (!$request->get('removable')) { return new JsonResponse($results); } $filterResults = array(); foreach ($folderDao->getRemovableContents($folderId) as $content) { $filterResults[$content] = $results[$content]; } return new JsonResponse($filterResults); }
/** * @param Request $request * @return Response */ protected function handle(Request $request) { $upload = intval($request->get("upload")); $groupId = Auth::getGroupId(); if (!$this->uploadDao->isAccessible($upload, $groupId)) { throw new \Exception("Permission Denied"); } $item = intval($request->get("item")); $this->uploadtree_tablename = $this->uploadDao->getUploadtreeTableName($upload); $itemTreeBounds = $this->uploadDao->getItemTreeBounds($item, $this->uploadtree_tablename); $left = $itemTreeBounds->getLeft(); if (empty($left)) { throw new \Exception("Job unpack/adj2nest hasn't completed."); } $scannerAgents = array_keys($this->agentNames); $scanJobProxy = new ScanJobProxy($this->agentDao, $upload); $scanJobProxy->createAgentStatus($scannerAgents); $selectedAgentId = intval($request->get('agentId')); $tag_pk = intval($request->get('tag')); $UniqueTagArray = array(); $this->licenseProjector = new LicenseMap($this->getObject('db.manager'), $groupId, LicenseMap::CONCLUSION, true); $vars = $this->createFileListing($tag_pk, $itemTreeBounds, $UniqueTagArray, $selectedAgentId, $groupId, $scanJobProxy); return new JsonResponse(array('sEcho' => intval($request->get('sEcho')), 'aaData' => $vars['fileData'], 'iTotalRecords' => intval($request->get('totalRecords')), 'iTotalDisplayRecords' => $vars['iTotalDisplayRecords'])); }
/** * @brief Display the loaded menu and plugins. */ function Output() { if ($this->State != PLUGIN_STATE_READY) { return; } $itemId = $_POST['uploadTreeId']; if (empty($itemId)) { return $this->errorJson("bad item id"); } $userId = Auth::getUserId(); $groupId = Auth::getGroupId(); $decisionMark = @$_POST['decisionMark']; if (!empty($decisionMark)) { $itemTableName = $this->uploadDao->getUploadtreeTableName($itemId); /** @var ItemTreeBounds */ $itemTreeBounds = $this->uploadDao->getItemTreeBounds($itemId, $itemTableName); $errMsg = $this->clearingDao->markDirectoryAsIrrelevant($itemTreeBounds, $groupId, $userId); if (empty($errMsg)) { return new JsonResponse(array('result' => 'success')); } return $this->errorJson($errMsg, $errMsg); } return $this->doEdit($userId, $groupId, $itemId); }
/** * \brief This function returns the scheduler status. */ public function Output() { $uTime = microtime(true); $V = ""; $Upload = GetParm("upload", PARM_INTEGER); /** @var UploadDao $uploadDao */ $uploadDao = $GLOBALS['container']->get('dao.upload'); if (!$uploadDao->isAccessible($Upload, Auth::getGroupId())) { $text = _("Permission Denied"); return "<h2>{$text}</h2>"; } $Item = GetParm("item", PARM_INTEGER); if (!$Item) { return _('No item selected'); } $updcache = GetParm("updcache", PARM_INTEGER); $tagbucket = GetParm("tagbucket", PARM_INTEGER); $this->uploadtree_tablename = GetUploadtreeTableName($Upload); /* Remove "updcache" from the GET args and set $this->UpdCache * This way all the url's based on the input args won't be * polluted with updcache * Use Traceback_parm_keep to ensure that all parameters are in order */ $CacheKey = "?mod=" . $this->Name . Traceback_parm_keep(array("upload", "item", "folder", "ars")); if ($updcache) { $_SERVER['REQUEST_URI'] = preg_replace("/&updcache=[0-9]*/", "", $_SERVER['REQUEST_URI']); unset($_GET['updcache']); $V = ReportCachePurgeByKey($CacheKey); } else { $V = ReportCacheGet($CacheKey); } if (!empty($tagbucket)) { $bucketagent_pk = GetParm("bapk", PARM_INTEGER); $bucket_pk = GetParm("bpk", PARM_INTEGER); $bucketpool_pk = GetParm("bp", PARM_INTEGER); $nomosagent_pk = GetParm("napk", PARM_INTEGER); $this->TagBucket($Upload, $Item, $bucketagent_pk, $bucket_pk, $bucketpool_pk, $nomosagent_pk); } $Cached = !empty($V); if (!$Cached) { $V .= "<font class='text'>\n"; $Children = GetNonArtifactChildren($Item, $this->uploadtree_tablename); if (count($Children) == 0) { // no children, display View-Meta micromenu $V .= Dir2Browse($this->Name, $Item, NULL, 1, "View-Meta", -1, '', '', $this->uploadtree_tablename) . "<P />\n"; } else { // has children, display Browse micormenu $V .= Dir2Browse($this->Name, $Item, NULL, 1, "Browse", -1, '', '', $this->uploadtree_tablename) . "<P />\n"; } if (!empty($Upload)) { $Uri = preg_replace("/&item=([0-9]*)/", "", Traceback()); $V .= $this->ShowUploadHist($Item, $Uri); } $V .= "</font>\n"; $text = _("Loading..."); } $Time = microtime(true) - $uTime; // convert usecs to secs $text = _("Elapsed time: %.2f seconds"); $V .= sprintf("<p><small>{$text}</small>", $Time); if ($Cached) { $text = _("cached"); $text1 = _("Update"); echo " <i>{$text}</i> <a href=\"{$_SERVER['REQUEST_URI']}&updcache=1\"> {$text1} </a>"; } else { if ($Time > 0.5) { ReportCachePut($CacheKey, $V); } } return $V; }
/** * @brief Process the upload request. */ protected function handleUpload(Request $request) { global $MODDIR; global $SYSCONFDIR; define("UPLOAD_ERR_EMPTY", 5); define("UPLOAD_ERR_INVALID_FOLDER_PK", 100); define("UPLOAD_ERR_RESEND", 200); $uploadErrors = array(UPLOAD_ERR_OK => _("No errors."), UPLOAD_ERR_INI_SIZE => _("Larger than upload_max_filesize ") . ini_get('upload_max_filesize'), UPLOAD_ERR_FORM_SIZE => _("Larger than form MAX_FILE_SIZE."), UPLOAD_ERR_PARTIAL => _("Partial upload."), UPLOAD_ERR_NO_FILE => _("No file selected."), UPLOAD_ERR_NO_TMP_DIR => _("No temporary directory."), UPLOAD_ERR_CANT_WRITE => _("Can't write to disk."), UPLOAD_ERR_EXTENSION => _("File upload stopped by extension."), UPLOAD_ERR_EMPTY => _("File is empty or you don't have permission to read the file."), UPLOAD_ERR_INVALID_FOLDER_PK => _("Invalid Folder."), UPLOAD_ERR_RESEND => _("This seems to be a resent file.")); $folderId = intval($request->get(self::FOLDER_PARAMETER_NAME)); $description = stripslashes($request->get(self::DESCRIPTION_INPUT_NAME)); $description = $this->basicShEscaping($description); $uploadedFile = $request->files->get(self::FILE_INPUT_NAME); if ($uploadedFile === null) { return array(false, $uploadErrors[UPLOAD_ERR_NO_FILE], $description); } if ($request->getSession()->get(self::UPLOAD_FORM_BUILD_PARAMETER_NAME) != $request->get(self::UPLOAD_FORM_BUILD_PARAMETER_NAME)) { return array(false, $uploadErrors[UPLOAD_ERR_RESEND], $description); } if ($uploadedFile->getSize() == 0 && $uploadedFile->getError() == 0) { return array(false, $uploadErrors[UPLOAD_ERR_EMPTY], $description); } else { if ($uploadedFile->getSize() >= UploadedFile::getMaxFilesize()) { return array(false, $uploadErrors[UPLOAD_ERR_INI_SIZE] . _(" is really ") . $uploadedFile->getSize() . " bytes.", $description); } } if (empty($folderId)) { return array(false, $uploadErrors[UPLOAD_ERR_INVALID_FOLDER_PK], $description); } if (!$uploadedFile->isValid()) { return array(false, $uploadedFile->getErrorMessage(), $description); } $originalFileName = $uploadedFile->getClientOriginalName(); $originalFileName = $this->basicShEscaping($originalFileName); $public = $request->get('public'); $publicPermission = $public == self::PUBLIC_ALL ? Auth::PERM_READ : Auth::PERM_NONE; /* Create an upload record. */ $uploadMode = 1 << 3; // code for "it came from web upload" $userId = Auth::getUserId(); $groupId = Auth::getGroupId(); $uploadId = JobAddUpload($userId, $groupId, $originalFileName, $originalFileName, $description, $uploadMode, $folderId, $publicPermission); if (empty($uploadId)) { return array(false, _("Failed to insert upload record"), $description); } try { $uploadedTempFile = $uploadedFile->move($uploadedFile->getPath(), $uploadedFile->getFilename() . '-uploaded')->getPathname(); } catch (FileException $e) { return array(false, _("Could not save uploaded file"), $description); } $projectGroup = $GLOBALS['SysConf']['DIRECTORIES']['PROJECTGROUP'] ?: 'fossy'; $wgetAgentCall = "{$MODDIR}/wget_agent/agent/wget_agent -C -g {$projectGroup} -k {$uploadId} '{$uploadedTempFile}' -c '{$SYSCONFDIR}'"; $wgetOutput = array(); exec($wgetAgentCall, $wgetOutput, $wgetReturnValue); unlink($uploadedTempFile); if ($wgetReturnValue != 0) { $message = implode(' ', $wgetOutput); if (empty($message)) { $message = _("File upload failed. Error:") . $wgetReturnValue; } return array(false, $message, $description); } $message = $this->postUploadAddJobs($request, $originalFileName, $uploadId); return array(true, $message, $description); }
/** * @brief Returns an upload job status in html * @param $jobData * @return Returns an upload job status in html **/ protected function show($jobData, $page) { global $container; /** @var DbManager */ $dbManager = $container->get('db.manager'); $outBuf = ''; $pagination = ''; $numJobs = count($jobData); if ($numJobs == 0) { return array('showJobsData' => "There are no jobs to display"); } $uri = Traceback_uri() . "?mod=showjobs"; $uriFull = $uri . Traceback_parm_keep(array("upload")); $uriFullMenu = $uri . Traceback_parm_keep(array("allusers")); /* Next/Prev menu */ $next = $numJobs > $this->maxUploadsPerPage; if ($numJobs > $this->maxUploadsPerPage) { $pagination .= MenuEndlessPage($page, $next, $uriFullMenu); } /*****************************************************************/ /* Now display the summary */ /*****************************************************************/ $job = -1; $uploadStyle = "style='font:bold 10pt verdana, arial, helvetica; background:gold; color:white;'"; $noUploadStyle = "style='font:bold 10pt verdana, arial, helvetica; background:gold; color:black;'"; $jobStyle = "style='font:bold 8pt verdana, arial, helvetica; background:lavender; color:black;'"; $prevupload_pk = ""; $firstJob = $page * $this->maxUploadsPerPage; $lastJob = $page * $this->maxUploadsPerPage + $this->maxUploadsPerPage; $jobNumber = -1; /** if $single_browse is 1, represent alread has an upload browse link, if single_browse is 0, no upload browse link */ $single_browse = 0; foreach ($jobData as $job) { /* Upload */ if (!empty($job["upload"])) { $uploadName = GetArrayVal("upload_filename", $job["upload"]); $uploadDesc = GetArrayVal("upload_desc", $job["upload"]); $upload_pk = GetArrayVal("upload_pk", $job["upload"]); $jobId = GetArrayVal("job_pk", $job["job"]); /** the column pfile_fk of the record in the table(upload) is NULL when this record is inserted */ if (!empty($upload_pk) && $prevupload_pk != $upload_pk || empty($upload_pk) && 0 == $single_browse) { $prevupload_pk = $upload_pk; $jobNumber++; /* Only display the jobs for this page */ if ($jobNumber >= $lastJob) { break; } if ($jobNumber < $firstJob) { continue; } /* blank line separator between pfiles */ $outBuf .= "<tr><td colspan=8> <hr> </td></tr>"; $outBuf .= "<tr>"; $outBuf .= "<th {$uploadStyle}></th>"; $outBuf .= "<th colspan=6 {$uploadStyle}>"; if (!empty($job['uploadtree'])) { $uploadtree_pk = $job['uploadtree']['uploadtree_pk']; $outBuf .= "<a title='Click to browse' href='" . Traceback_uri() . "?mod=browse&upload=" . $job['job']['job_upload_fk'] . "&item=" . $uploadtree_pk . "'>"; } else { $outBuf .= "<a {$noUploadStyle}>"; } /* get $userName if all jobs are shown */ $userName = ""; $allusers = GetParm("allusers", PARM_INTEGER); if ($allusers > 0) { $statementName = __METHOD__ . "UploadRec"; $uploadRec = $dbManager->getSingleRow("select * from upload where upload_pk=\$1", array($job['job']['job_upload_fk']), $statementName); if (!empty($uploadRec['user_fk'])) { $statementName = __METHOD__ . "UserRec"; $userRec = $dbManager->getSingleRow("select * from users where user_pk=\$1", array($uploadRec['user_fk']), $statementName); $userName = "******"; } else { $statementName = __METHOD__ . "UserRec1"; $userRec = $dbManager->getSingleRow("select * from users where user_pk=\$1", array($job['job']['job_user_fk']), $statementName); $userName = "******"; } } $outBuf .= $uploadName . $userName; if (!empty($uploadDesc)) { $outBuf .= " (" . $uploadDesc . ")"; } $outBuf .= "</a>"; $outBuf .= "</th>"; $outBuf .= "<th {$uploadStyle}><a>" . $this->showJobsDao->getEstimatedTime($jobId) . "</a></th>"; $outBuf .= "</tr>"; $single_browse = 1; } else { if ($jobNumber < $firstJob) { continue; } } } else { /* Show Jobs that are not attached to an upload */ $jobNumber++; /* Only display the jobs for this page */ if ($jobNumber >= $lastJob) { break; } if ($jobNumber < $firstJob) { continue; } /* blank line separator between pfiles */ $outBuf .= "<tr><td colspan=8> <hr> </td></tr>"; $outBuf .= "<tr>"; $outBuf .= "<th {$noUploadStyle}></th>"; $outBuf .= "<th colspan=6 {$noUploadStyle}>"; $outBuf .= htmlentities($job["job"]["job_name"], ENT_QUOTES); $outBuf .= "</th>"; $outBuf .= "<th {$noUploadStyle}></th>"; $outBuf .= "</tr>"; } /* Job data */ $outBuf .= "<tr>"; $outBuf .= "<th {$jobStyle}>"; $outBuf .= _("Job/Dependency"); $outBuf .= "</th>"; $outBuf .= "<th {$jobStyle}>"; $outBuf .= _("Status"); $outBuf .= "</th>"; $outBuf .= "<th colspan=3 {$jobStyle}>"; $outBuf .= htmlentities($job["job"]["job_name"], ENT_QUOTES); $outBuf .= "</th>"; $outBuf .= "<th {$jobStyle}>"; $outBuf .= _("Average items/sec"); $outBuf .= "</th>"; $outBuf .= "<th {$jobStyle}>"; $outBuf .= _("ETA"); $outBuf .= "</th>"; $outBuf .= "<th {$jobStyle}>"; $outBuf .= "</th></tr>"; /* Job queue */ foreach ($job['jobqueue'] as $jq_pk => $jobqueueRec) { $varJobQueueRow = array('jqId' => $jq_pk, 'jobId' => $jobqueueRec['jq_job_fk'], 'class' => $this->getClass($jobqueueRec), 'uriFull' => $uriFull, 'depends' => $jobqueueRec['jdep_jq_depends_fk'] ? $jobqueueRec['depends'] : array(), 'status' => $jobqueueRec['jq_endtext'], 'agentName' => $jobqueueRec['jq_type'], 'itemsProcessed' => $jobqueueRec['jq_itemsprocessed'], 'startTime' => substr($jobqueueRec['jq_starttime'], 0, 16), 'endTime' => empty($jobqueueRec["jq_endtime"]) ? '' : substr($jobqueueRec['jq_endtime'], 0, 16), 'endText' => $jobqueueRec['jq_endtext']); if (!empty($jobqueueRec["jq_endtime"])) { $numSecs = strtotime($jobqueueRec['jq_endtime']) - strtotime($jobqueueRec['jq_starttime']); } else { $numSecs = time() - strtotime($jobqueueRec['jq_starttime']); } $itemsPerSec = null; if ($jobqueueRec['jq_starttime']) { $itemsPerSec = $this->showJobsDao->getNumItemsPerSec($jobqueueRec['jq_itemsprocessed'], $numSecs); $varJobQueueRow['itemsPerSec'] = $itemsPerSec; } if (empty($jobqueueRec['jq_endtime'])) { $varJobQueueRow['eta'] = $this->showJobsDao->getEstimatedTime($jobId, $jobqueueRec['jq_type'], $itemsPerSec, $job['job']['job_upload_fk']); } $varJobQueueRow['canDoActions'] = $_SESSION[Auth::USER_LEVEL] == PLUGIN_DB_ADMIN || Auth::getUserId() == $job['job']['job_user_fk']; $varJobQueueRow['isInProgress'] = $jobqueueRec['jq_end_bits'] == 0; $varJobQueueRow['isReady'] = $jobqueueRec['jq_end_bits'] == 1; switch ($jobqueueRec['jq_type']) { case 'readmeoss': $varJobQueueRow['download'] = "ReadMeOss"; break; case 'spdx2': $varJobQueueRow['download'] = "SPDX2 report"; break; case 'spdx2tv': $varJobQueueRow['download'] = "SPDX2 tag/value report"; break; case 'dep5': $varJobQueueRow['download'] = "DEP5 copyright file"; break; default: $varJobQueueRow['download'] = ""; } $outBuf .= $this->renderString('ui-showjobs-jobqueue-row.html.twig', $varJobQueueRow); } } if ($numJobs > $this->maxUploadsPerPage) { $pagination = "<p>" . MenuEndlessPage($page, $next, $uriFullMenu); } return array('showJobsData' => $outBuf, 'pagination' => $pagination); }
public function Output() { $OutBuf = ""; $uploadId = GetParm("upload", PARM_INTEGER); $item = GetParm("item", PARM_INTEGER); $filter = GetParm("filter", PARM_STRING); /* check upload permissions */ if (!$this->uploadDao->isAccessible($uploadId, Auth::getGroupId())) { $text = _("Permission Denied"); return "<h2>{$text}</h2>"; } /* Get uploadtree_tablename */ $uploadtree_tablename = GetUploadtreeTableName($uploadId); $this->uploadtree_tablename = $uploadtree_tablename; /************************/ /* Show the folder path */ /************************/ $this->vars['dir2browse'] = Dir2Browse($this->Name, $item, NULL, 1, "Browse", -1, '', '', $uploadtree_tablename); if (empty($uploadId)) { return 'no item selected'; } /** advanced interface allowing user to select dataset (agent version) */ $dataset = $this->agentName . "_dataset"; $arstable = $this->agentName . "_ars"; /** get proper agent_id */ $agentId = GetParm("agent", PARM_INTEGER); if (empty($agentId)) { $agentId = LatestAgentpk($uploadId, $arstable); } if ($agentId == 0) { /** schedule copyright */ $OutBuf .= ActiveHTTPscript("Schedule"); $OutBuf .= "<script language='javascript'>\n"; $OutBuf .= "function Schedule_Reply()\n"; $OutBuf .= " {\n"; $OutBuf .= " if ((Schedule.readyState==4) && (Schedule.status==200 || Schedule.status==400))\n"; $OutBuf .= " document.getElementById('msgdiv').innerHTML = Schedule.responseText;\n"; $OutBuf .= " }\n"; $OutBuf .= "</script>\n"; $OutBuf .= "<form name='formy' method='post'>\n"; $OutBuf .= "<div id='msgdiv'>\n"; $OutBuf .= _("No data available."); $OutBuf .= "<input type='button' name='scheduleAgent' value='Schedule Agent'"; $OutBuf .= "onClick=\"Schedule_Get('" . Traceback_uri() . "?mod=schedule_agent&upload={$uploadId}&agent=agent_{$this->agentName}')\">\n"; $OutBuf .= "</input>"; $OutBuf .= "</div> \n"; $OutBuf .= "</form>\n"; $this->vars['pageContent'] = $OutBuf; return; } $AgentSelect = AgentSelect($this->agentName, $uploadId, $dataset, $agentId, "onchange=\"addArsGo('newds', 'copyright_dataset');\""); /** change the copyright result when selecting one version of copyright */ if (!empty($AgentSelect)) { $action = Traceback_uri() . '?mod=' . GetParm('mod', PARM_RAW) . Traceback_parm_keep(array('upload', 'item')); $OutBuf .= "<script type='text/javascript'>\n function addArsGo(formid, selectid)\n {\n var selectobj = document.getElementById(selectid);\n var Agent_pk = selectobj.options[selectobj.selectedIndex].value;\n document.getElementById(formid).action='{$action}'+'&agent='+Agent_pk;\n document.getElementById(formid).submit();\n return;\n }\n </script>"; $OutBuf .= "<form action=\"{$action}\" id=\"newds\" method=\"POST\">{$AgentSelect}</form>"; } $selectKey = $filter == 'nolic' ? 'nolic' : 'all'; $OutBuf .= "<select name='view_filter' id='view_filter' onchange='ChangeFilter(this,{$uploadId}, {$item});'>"; foreach (array('all' => _("Show all"), 'nolic' => _("Show files without licenses")) as $key => $text) { $selected = $selectKey == $key ? "selected" : ""; $OutBuf .= "<option {$selected} value=\"{$key}\">{$text}</option>"; } $OutBuf .= "</select>"; $uri = preg_replace("/&item=([0-9]*)/", "", Traceback()); list($tables, $tableVars) = $this->ShowUploadHist($uploadId, $item, $uri, $selectKey, $uploadtree_tablename, $agentId); $this->vars['tables'] = $tableVars; $this->vars['pageContent'] = $OutBuf . $tables; $this->vars['scriptBlock'] = $this->createScriptBlock(); return; }
public function Output() { $uploadId = GetParm("upload", PARM_INTEGER); if (!$this->uploadDao->isAccessible($uploadId, Auth::getGroupId())) { return; } $itemId = GetParm("item", PARM_INTEGER); $this->vars['micromenu'] = Dir2Browse("browse", $itemId, NULL, $showBox = 0, "View-Meta"); $V = ""; $V .= $this->ShowTagInfo($uploadId, $itemId); $V .= $this->ShowPackageinfo($uploadId, $itemId, 1); $V .= $this->ShowMetaView($uploadId, $itemId); $V .= $this->ShowSightings($uploadId, $itemId); $V .= $this->ShowView($uploadId, $itemId); return $V; }
/** * \brief This function is called when user output is * requested. This function is responsible for content. */ protected function getPathAndName() { if ($this->State != \PLUGIN_STATE_READY) { throw new Exception('Download plugin is not ready'); } global $container; /** @var DbManager $dbManager */ $dbManager = $container->get('db.manager'); if (!$dbManager->getDriver()) { throw new Exception("Missing database connection."); } $reportId = GetParm("report", PARM_INTEGER); $item = GetParm("item", PARM_INTEGER); $logJq = GetParm('log', PARM_INTEGER); if (!empty($reportId)) { $row = $dbManager->getSingleRow("SELECT * FROM reportgen WHERE job_fk = \$1", array($reportId), "reportFileName"); if ($row === false) { throw new Exception("Missing report"); } $path = $row['filepath']; $filename = basename($path); $uploadId = $row['upload_fk']; } elseif (!empty($logJq)) { $sql = "SELECT jq_log, job_upload_fk FROM jobqueue LEFT JOIN job ON job.job_pk = jobqueue.jq_job_fk WHERE jobqueue.jq_pk =\$1"; $row = $dbManager->getSingleRow($sql, array($logJq), "jqLogFileName"); if ($row === false) { throw new Exception("Missing report"); } $path = $row['jq_log']; $filename = basename($path); $uploadId = $row['job_upload_fk']; } elseif (empty($item)) { throw new Exception("Invalid item parameter"); } else { $path = RepPathItem($item); if (empty($path)) { throw new Exception("Invalid item parameter"); } $fileHandle = @fopen(RepPathItem($item), "rb"); /* note that CheckRestore() does not return. */ if (empty($fileHandle)) { $this->CheckRestore($item, $path); } $row = $dbManager->getSingleRow("SELECT ufile_name, upload_fk FROM uploadtree WHERE uploadtree_pk = \$1", array($item)); if ($row === false) { throw new Exception("Missing item"); } $filename = $row['ufile_name']; $uploadId = $row['upload_fk']; } /* @var $uploadDao UploadDao */ $uploadDao = $GLOBALS['container']->get('dao.upload'); if (!Auth::isAdmin() && !$uploadDao->isAccessible($uploadId, Auth::getGroupId())) { throw new Exception("No Permission: {$uploadId}"); } if (!file_exists($path)) { throw new Exception("File does not exist"); } if (!is_file($path)) { throw new Exception("Not a regular file"); } return array($path, $filename); }
/** * @brief Get uploads and folder info, starting from $ParentFolder. * The array is sorted by folder and upload name. * Folders that are empty do not show up. * This is recursive! * NOTE: If there is a recursive loop in the folder table, then * this will loop INFINITELY. * * @param int $ParentFolder folder_pk, -1 for users root folder * @param string $FolderPath Used for recursion, caller should not specify. * @param Auth::PERM_READ | Auth::PERM_WRITE * @return array of {upload_pk, upload_desc, name, folder} */ function FolderListUploadsRecurse($ParentFolder = -1, $FolderPath = '', $perm = Auth::PERM_READ) { global $PG_CONN; if (empty($PG_CONN)) { return array(); } if (empty($ParentFolder)) { return array(); } if ($perm != Auth::PERM_READ && ($perm = Auth::PERM_WRITE)) { return array(); } if ($ParentFolder == "-1") { $ParentFolder = FolderGetTop(); } $groupId = Auth::getGroupId(); /* @var $uploadDao UploadDao */ $uploadDao = $GLOBALS['container']->get('dao.upload'); $List = array(); /* Get list of uploads */ /** mode 1<<1 = upload_fk **/ $sql = "SELECT upload_pk, upload_desc, ufile_name, folder_name FROM folder,foldercontents,uploadtree, upload\n WHERE \n foldercontents.parent_fk = '{$ParentFolder}'\n AND foldercontents.foldercontents_mode = " . FolderDao::MODE_UPLOAD . "\n AND foldercontents.child_id = upload.upload_pk\n AND folder.folder_pk = {$ParentFolder}\n AND uploadtree.upload_fk = upload.upload_pk\n AND uploadtree.parent is null\n ORDER BY uploadtree.ufile_name,upload.upload_desc"; $result = pg_query($PG_CONN, $sql); DBCheckResult($result, $sql, __FILE__, __LINE__); while ($R = pg_fetch_assoc($result)) { if (empty($R['upload_pk'])) { continue; } if ($perm == Auth::PERM_READ && !$uploadDao->isAccessible($R['upload_pk'], $groupId)) { continue; } if ($perm == Auth::PERM_WRITE && !$uploadDao->isEditable($R['upload_pk'], $groupId)) { continue; } $New['upload_pk'] = $R['upload_pk']; $New['upload_desc'] = $R['upload_desc']; $New['name'] = $R['ufile_name']; $New['folder'] = $FolderPath . "/" . $R['folder_name']; array_push($List, $New); } pg_free_result($result); /* Get list of subfolders and recurse */ /** mode 1<<0 = folder_pk **/ $sql = "SELECT A.child_id AS id,B.folder_name AS folder,B.folder_name AS subfolder\n\tFROM foldercontents AS A\n\tINNER JOIN folder AS B ON A.parent_fk = B.folder_pk\n\tAND A.foldercontents_mode = " . FolderDao::MODE_FOLDER . "\n\tAND A.parent_fk = '{$ParentFolder}'\n AND B.folder_pk = {$ParentFolder}\n\tORDER BY B.folder_name;"; $result = pg_query($PG_CONN, $sql); DBCheckResult($result, $sql, __FILE__, __LINE__); while ($R = pg_fetch_assoc($result)) { if (empty($R['id'])) { continue; } /* RECURSE! */ $SubList = FolderListUploadsRecurse($R['id'], $FolderPath . "/" . $R['folder'], $perm); $List = array_merge($List, $SubList); } pg_free_result($result); /* Return findings */ return $List; }
/** * @brief Delete a group (for constraint, see http://www.fossology.org/projects/fossology/wiki/GroupsPerms ) * @param $groupId * @throws \Exception * @return bool true on success */ function deleteGroup($groupId) { $groupArray = $this->dbManager->getSingleRow('SELECT group_pk, group_name FROM groups WHERE group_pk=$1', array($groupId), __METHOD__ . '.exists'); if ($groupArray === false) { throw new \Exception(_("Group does not exist. Not deleted.")); } $groupConstraint = $this->dbManager->getSingleRow('SELECT count(*) cnt FROM users WHERE user_name=$1', array($groupArray['group_name']), __METHOD__ . '.contraint'); if ($groupConstraint['cnt']) { throw new \Exception(_("Group must not be deleted due to name constraint.")); } if ($_SESSION[Auth::USER_LEVEL] != PLUGIN_DB_ADMIN) { $userId = Auth::getUserId(); $adminLevel = $this->dbManager->getSingleRow("SELECT count(*) cnt FROM group_user_member WHERE group_fk=\$1 and user_fk=\$2 and group_perm=1", array($groupId, $userId), __METHOD__ . '.admin_lvl'); if ($adminLevel['cnt'] < 1) { $text = _("Permission Denied."); throw new \Exception($text); } } $this->dbManager->begin(); $this->dbManager->getSingleRow("DELETE FROM perm_upload WHERE group_fk=\$1", array($groupId), __METHOD__ . '.perm_upload'); $this->dbManager->getSingleRow("DELETE FROM group_user_member WHERE group_fk=\$1", array($groupId), __METHOD__ . '.gum'); $this->dbManager->getSingleRow("UPDATE users SET new_upload_group_fk=NULL, new_upload_perm=NULL WHERE new_upload_group_fk=\$1", array($groupId), __METHOD__ . '.upload_group'); $newGroupIdStmt = '(SELECT group_fk FROM group_user_member WHERE user_fk=user_pk LIMIT 1)'; $this->dbManager->getSingleRow("UPDATE users SET group_fk={$newGroupIdStmt} WHERE group_fk=\$1", array($groupId), __METHOD__ . '.active_group'); $this->dbManager->getSingleRow("DELETE FROM groups WHERE group_pk=\$1", array($groupId), __METHOD__ . '.delete'); $this->dbManager->commit(); return true; }
/** * \brief Given a filename, return all uploadtree. * \param $Item uploadtree_pk of tree to search, if empty, do global search * \param $Filename filename or pattern to search for, false if unused * \param $tag tag (or tag pattern mytag%) to search for, false if unused * \param $Page display page number * \param $SizeMin Minimum file size, -1 if unused * \param $SizeMax Maximum file size, -1 if unused * \param $searchtype "containers" or "allfiles" * \return array of uploadtree recs. Each record contains uploadtree_pk, parent, * upload_fk, pfile_fk, ufile_mode, and ufile_name */ function GetResults($Item, $Filename, $tag, $Page, $SizeMin, $SizeMax, $searchtype, $License, $Copyright) { global $PG_CONN; $UploadtreeRecs = array(); // uploadtree record array to return $NeedTagfileTable = true; $NeedTaguploadtreeTable = true; if ($Item) { /* Find lft and rgt bounds for this $Uploadtree_pk */ $row = $this->uploadDao->getUploadEntry($Item); if (empty($row)) { $text = _("Invalid URL, nonexistant item"); return "<h2>{$text} {$Item}</h2>"; } $lft = $row["lft"]; $rgt = $row["rgt"]; $upload_pk = $row["upload_fk"]; /* Check upload permission */ if (!$this->uploadDao->isAccessible($upload_pk, Auth::getGroupId())) { return $UploadtreeRecs; } } /* Start the result select stmt */ $SQL = "SELECT DISTINCT uploadtree_pk, parent, upload_fk, uploadtree.pfile_fk, ufile_mode, ufile_name FROM uploadtree"; if (!empty($License)) { $SQL .= ", ( SELECT license_ref.rf_shortname, license_file.rf_fk, license_file.pfile_fk\n FROM license_file JOIN license_ref ON license_file.rf_fk = license_ref.rf_pk) AS pfile_ref"; } if (!empty($Copyright)) { $SQL .= ",copyright"; } /* Figure out the tag_pk's of interest */ if (!empty($tag)) { $sql = "select tag_pk from tag where tag ilike '{$tag}'"; $result = pg_query($PG_CONN, $sql); DBCheckResult($result, $sql, __FILE__, __LINE__); if (pg_num_rows($result) < 1) { /* tag doesn't match anything, so no results are possible */ pg_free_result($result); return $UploadtreeRecs; } /* Make a list of the tag_pk's that satisfy the criteria */ $tag_pk_array = pg_fetch_all($result); pg_free_result($result); /* add the tables needed for the tag query */ $sql = "select tag_file_pk from tag_file limit 1"; $result = pg_query($PG_CONN, $sql); DBCheckResult($result, $sql, __FILE__, __LINE__); if (pg_num_rows($result) < 1) { /* tag_file didn't have data, don't add the tag_file table for tag query */ $NeedTagfileTable = false; } else { $SQL .= ", tag_file"; } pg_free_result($result); /* add the tables needed for the tag query */ $sql = "select tag_uploadtree_pk from tag_uploadtree limit 1"; $result = pg_query($PG_CONN, $sql); DBCheckResult($result, $sql, __FILE__, __LINE__); if (pg_num_rows($result) < 1) { /* tag_uploadtree didn't have data, don't add the tag_uploadtree table for tag query */ $NeedTaguploadtreeTable = false; } else { $SQL .= ", tag_uploadtree"; } pg_free_result($result); if (!$NeedTagfileTable && !$NeedTaguploadtreeTable) { $SQL .= ", tag_file, tag_uploadtree"; } } /* do we need the pfile table? Yes, if any of these are a search critieria. */ if (!empty($SizeMin) or !empty($SizeMax)) { $SQL .= ", pfile where pfile_pk=uploadtree.pfile_fk "; $NeedAnd = true; } else { $SQL .= " where "; $NeedAnd = false; } /* add the tag conditions */ if (!empty($tag)) { if ($NeedAnd) { $SQL .= " AND"; } $SQL .= "("; $NeedOr = false; foreach ($tag_pk_array as $tagRec) { if ($NeedOr) { $SQL .= " OR"; } $SQL .= "("; $tag_pk = $tagRec['tag_pk']; if ($NeedTagfileTable && $NeedTaguploadtreeTable) { $SQL .= "(uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk={$tag_pk}) or (uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk={$tag_pk}) "; } else { if ($NeedTaguploadtreeTable) { $SQL .= "uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk={$tag_pk}"; } else { if ($NeedTagfileTable) { $SQL .= "uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk={$tag_pk}"; } else { $SQL .= "(uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk={$tag_pk}) or (uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk={$tag_pk}) "; } } } $SQL .= ")"; $NeedOr = 1; } $NeedAnd = 1; $SQL .= ")"; } if ($Filename) { $Filename = str_replace("'", "''", $Filename); // protect DB if ($NeedAnd) { $SQL .= " AND"; } $SQL .= " ufile_name ilike '{$Filename}'"; $NeedAnd = 1; } if (!empty($SizeMin)) { if ($NeedAnd) { $SQL .= " AND"; } $SQL .= " pfile.pfile_size >= {$SizeMin}"; $NeedAnd = 1; } if (!empty($SizeMax)) { if ($NeedAnd) { $SQL .= " AND"; } $SQL .= " pfile.pfile_size <= {$SizeMax}"; $NeedAnd = 1; } if ($Item) { if ($NeedAnd) { $SQL .= " AND"; } $SQL .= " upload_fk = {$upload_pk} AND lft >= {$lft} AND rgt <= {$rgt}"; $NeedAnd = 1; } /* search only containers */ $dir_ufile_mode = 536888320; if ($searchtype == 'containers') { if ($NeedAnd) { $SQL .= " AND"; } $SQL .= " ((ufile_mode & (1<<29))!=0) AND ((ufile_mode & (1<<28))=0)"; $NeedAnd = 1; } if ($searchtype == 'directory') { if ($NeedAnd) { $SQL .= " AND"; } $SQL .= " ((ufile_mode & (1<<29))!=0) AND ((ufile_mode & (1<<28))=0) AND (ufile_mode != {$dir_ufile_mode}) and pfile_fk != 0"; $NeedAnd = 1; } /** license and copyright */ if (!empty($License)) { if ($NeedAnd) { $SQL .= " AND"; } $SQL .= " uploadtree.pfile_fk=pfile_ref.pfile_fk and pfile_ref.rf_shortname ilike '{$License}'"; $NeedAnd = 1; } if (!empty($Copyright)) { if ($NeedAnd) { $SQL .= " AND"; } $SQL .= " uploadtree.pfile_fk=copyright.pfile_fk and copyright.content ilike '%{$Copyright}%'"; } $Offset = $Page * $this->MaxPerPage; $SQL .= " ORDER BY ufile_name, uploadtree.pfile_fk"; $SQL .= " LIMIT {$this->MaxPerPage} OFFSET {$Offset};"; $result = pg_query($PG_CONN, $SQL); DBCheckResult($result, $SQL, __FILE__, __LINE__); if (pg_num_rows($result)) { while ($row = pg_fetch_assoc($result)) { if (!$this->uploadDao->isAccessible($row['upload_fk'], Auth::getGroupId())) { continue; } $UploadtreeRecs[] = $row; } } pg_free_result($result); return $UploadtreeRecs; }
/** * \brief This function returns the scheduler status. */ function Output() { global $PG_CONN; global $SysConf; $V = ""; $formVars = array(); if (!$PG_CONN) { echo _("NO DB connection"); } if ($this->State != PLUGIN_STATE_READY) { return 0; } $uploadtree_pk = GetParm("item", PARM_INTEGER); if (empty($uploadtree_pk)) { return; } $upload_pk = GetParm("upload", PARM_INTEGER); if (empty($upload_pk)) { return; } if (!$this->uploadDao->isAccessible($upload_pk, Auth::getGroupId())) { $text = _("Permission Denied"); return "<h2>{$text}</h2>"; } $uploadtreeTablename = GetUploadtreeTableName($upload_pk); $warnings = array(); $agent_pks_dict = $this->getAgentPksFromRequest($upload_pk); $agent_pks = array(); foreach ($agent_pks_dict as $agent_name => $agent_pk) { if ($agent_pk === false) { $warnings[] = _("No information for agent: {$agent_name}"); } else { $agent_pks[] = $agent_pk; $formVars["agentToInclude_" . $agent_name] = "1"; } } $dltext = GetParm("output", PARM_STRING) == 'dltext'; $formVars["dltext"] = $dltext; $NomostListNum = @$SysConf['SYSCONFIG']['NomostListNum']; $formVars["NomostListNum"] = $NomostListNum; $includeSubfolder = GetParm("doNotIncludeSubfolder", PARM_STRING) !== "yes"; $formVars["includeSubfolder"] = $includeSubfolder; $ignore = GetParm("showContainers", PARM_STRING) !== "yes"; $formVars["showContainers"] = !$ignore; $exclude = GetParm("exclude", PARM_STRING); $formVars["exclude"] = $exclude; $V .= $this->renderString("ui-license-list-form.html.twig", $formVars); $V .= "<hr/>"; $lines = $this->createListOfLines($uploadtreeTablename, $uploadtree_pk, $agent_pks, $NomostListNum, $includeSubfolder, $exclude, $ignore); if (array_key_exists("warn", $lines)) { $warnings[] = $lines["warn"]; unset($lines["warn"]); } foreach ($warnings as $warning) { $V .= "<br><b>{$warning}</b><br>"; } if ($dltext) { $request = $this->getRequest(); $itemId = intval($request->get('item')); $path = Dir2Path($itemId, $uploadtreeTablename); $fileName = $path[count($path) - 1]['ufile_name'] . ".txt"; $headers = array("Content-Type" => "text", "Content-Disposition" => "attachment; filename=\"{$fileName}\""); $response = new Response(implode("\n", $lines), Response::HTTP_OK, $headers); return $response; } else { return $V . '<pre>' . implode("\n", $lines) . '</pre>'; } }