/**
  * Create a report for table view based on URL
  */
 function &get($reportId, $request, $item, &$feedback)
 {
     $report = null;
     $report = new Docman_Report();
     // Drop all filters
     if ($request->exist('clear_filters')) {
         $this->initReport($report, $request, $item);
         $this->initColumns($report, $request);
         return $report;
     }
     $noDbReport = true;
     // First, try to find a report in DB
     //if($request->exist('report_id')) {
     //    $reportId = (int) $request->get('report_id');
     // todo Verify validity of the info
     //}
     if ($reportId > 0) {
         // todo Verify validity of the info
         $dao =& $this->getDao();
         $dar = $dao->searchById($reportId);
         if ($dar && !$dar->isError() && $dar->rowCount() == 1) {
             $noDbReport = false;
             $row = $dar->getRow();
             $report = new Docman_Report();
             $report->initFromRow($row);
             $filterFactory = new Docman_FilterFactory($this->groupId);
             $fa = $filterFactory->addFiltersToReport($report);
             $this->initColumns($report, $request);
         }
     }
     if ($noDbReport) {
         // Init from url
         $this->initReport($report, $request, $item);
         $this->initFilters($report, $request, $feedback);
         $this->initColumns($report, $request);
     }
     // Save current report
     if ($request->exist('save_report')) {
         $um =& UserManager::instance();
         $user = $um->getCurrentUser();
         $dpm =& Docman_PermissionsManager::instance($this->groupId);
         $report->setUserId($user->getId());
         // New report
         if ($request->get('save_report') == 'newp' || $request->get('save_report') == 'newi') {
             if ($request->exist('report_name')) {
                 $reportName = $request->get('report_name');
                 // todo Validate report name
                 $report->setScope('I');
                 if ($dpm->userCanAdmin($user)) {
                     if ($request->get('save_report') == 'newp') {
                         $report->setScope('P');
                     }
                 }
                 $report->setName($reportName);
                 $this->saveReport($report);
             }
         }
         // Override an existing one
         if (is_numeric($request->get('save_report'))) {
             $reportId = (int) $request->get('save_report');
             // validate reportId
             $updReportOk = false;
             $refReport = $this->getReportById($reportId);
             if ($refReport !== null) {
                 if ($refReport->getGroupId() == $this->groupId) {
                     if ($dpm->userCanAdmin($user)) {
                         $updReportOk = true;
                     } else {
                         if ($refReport->getScope() == 'I' && $refReport->getUserId() == $user->getId()) {
                             $updReportOk = true;
                         }
                     }
                 }
             }
             if ($updReportOk) {
                 if ($request->exist('report_name') && trim($request->get('report_name')) != '') {
                     $refReport->setName($request->get('report_name'));
                 }
                 $refReport->setItemId($item->getId());
                 // Replace filters in ref report by the filters built from the URL.
                 $refReport->setFiltersArray($report->getFiltersArray());
                 $this->saveReport($refReport);
             }
         }
     }
     return $report;
 }