Пример #1
0
 public function testFilter()
 {
     $filter = new module_report_filter(self::$DI['app'], [], $this->report->getTransQueryString());
     $this->assertEquals([], $filter->getTabFilter());
     $filter->addFilter('x', 'LIKE', 'y');
     $filter->addFilter('x', 'LIKE', 'z');
     $filter->addFilter('1', '=', '1');
     $filter->addFilter('1', '=', '1');
     $tabfilter = $filter->getTabFilter();
     $this->assertEquals(2, count($tabfilter));
     $added_filter = $tabfilter[0];
     $this->assertInternalType(PHPUnit_Framework_Constraint_IsType::TYPE_ARRAY, $added_filter);
     $this->assertArrayHasKey('f', $added_filter);
     $this->assertArrayHasKey('o', $added_filter);
     $this->assertArrayHasKey('v', $added_filter);
     $this->assertEquals('x', $added_filter['f']);
     $this->assertEquals('LIKE', $added_filter['o']);
     $this->assertEquals('y', $added_filter['v']);
     $active_column = $filter->getActiveColumn();
     $this->assertEquals('x', $active_column[0]);
     $tabfilter = $filter->getTabFilter();
     $this->assertEquals(2, count($tabfilter));
     $filter->addFilter('y', '=', 'z');
     $tabfilter = $filter->getTabFilter();
     $this->assertEquals(3, count($tabfilter));
     $filter->addFilter('user', '=', 'o');
     $tabfilter = $filter->getTabFilter();
     $this->assertEquals(4, count($tabfilter));
     $filter->addFilter('a', 'OR', '');
     $filter->addFilter('appli', '=', 'a:1:{i:0;i:1;}');
     $filter->addFilter('ddate', '=', 'o');
     $this->assertInternalType(PHPUnit_Framework_Constraint_IsType::TYPE_ARRAY, $filter->getPostingFilter());
     $nbBefore = count($filter->getTabFilter());
     $filter->removeFilter('ddate');
     $nbAfter = count($filter->getTabFilter());
     $this->assertEquals($nbBefore - 1, $nbAfter);
 }
Пример #2
0
 /**
  * Set Report configuration according to request parameters
  *
  * @param  Application    $app     An application instance
  * @param  Request        $request A request instance
  * @param  \module_report $report  A report instance
  * @param  Array          $conf    A report column configuration
  * @param  Boolean        $what    Whether to group on a particular field or not
  * @return Array
  */
 private function doReport(Application $app, Request $request, \module_report $report, $conf, $what = false)
 {
     if ($app['conf']->get(['registry', 'modules', 'anonymous-report']) == true) {
         if (isset($conf['user'])) {
             unset($conf['user']);
         }
         if (isset($conf['ip'])) {
             unset($conf['ip']);
         }
     }
     //save initial conf
     $base_conf = $conf;
     //format conf according user preferences
     if ('' !== ($columnsList = $request->request->get('list_column', ''))) {
         $new_conf = $conf;
         $columns = explode(',', $columnsList);
         foreach (array_keys($conf) as $col) {
             if (!in_array($col, $columns)) {
                 unset($new_conf[$col]);
             }
         }
         $conf = $new_conf;
     }
     //display content of a table column when user click on it
     if ($request->request->get('conf') == 'on') {
         return $app->json(['liste' => $app['twig']->render('report/listColumn.html.twig', ['conf' => $base_conf]), 'title' => $app->trans('configuration')]);
     }
     //set order
     if ('' !== ($order = $request->request->get('order', '')) && '' !== ($field = $request->request->get('champ', ''))) {
         $report->setOrder($field, $order);
     }
     //work on filters
     $mapColumnTitleToSqlField = $report->getTransQueryString();
     $currentfilter = [];
     if ('' !== ($serializedFilter = $request->request->get('liste_filter', ''))) {
         $currentfilter = @unserialize(urldecode($serializedFilter));
     }
     $filter = new \module_report_filter($app, $currentfilter, $mapColumnTitleToSqlField);
     if ('' !== ($filterColumn = $request->request->get('filter_column', ''))) {
         $field = current(explode(' ', $filterColumn));
         $value = $request->request->get('filter_value', '');
         if ($request->request->get('liste') == 'on') {
             return $app->json(['diag' => $app['twig']->render('report/colFilter.html.twig', ['result' => $report->colFilter($field), 'field' => $field]), 'title' => $app->trans('filtrer les resultats sur la colonne %colonne%', ['%colonne%' => $field])]);
         }
         if ($field === $value) {
             $filter->removeFilter($field);
         } else {
             $filter->addFilter($field, '=', $value);
         }
     }
     //set new request filter if user asking for them
     if ($request->request->get('precise') == 1) {
         $filter->addFilter('xml', 'LIKE', $request->request->get('word', ''));
     } elseif ($request->request->get('precise') == 2) {
         $filter->addFilter('record_id', '=', $request->request->get('word', ''));
     }
     //set filters to current report
     $report->setFilter($filter->getTabFilter());
     $report->setActiveColumn($filter->getActiveColumn());
     $report->setPostingFilter($filter->getPostingFilter());
     // display a new arraywhere results are group
     if ('' !== ($groupby = $request->request->get('groupby', ''))) {
         $report->setConfig(false);
         $groupby = current(explode(' ', $groupby));
         $reportArray = $report->buildReport(false, $groupby);
         if (count($reportArray['allChamps']) > 0 && count($reportArray['display']) > 0) {
             $groupField = isset($reportArray['display'][$reportArray['allChamps'][0]]['title']) ? $reportArray['display'][$reportArray['allChamps'][0]]['title'] : '';
         } else {
             $groupField = isset($conf[strtolower($groupby)]['title']) ? $conf[strtolower($groupby)]['title'] : '';
         }
         return $app->json(['rs' => $app['twig']->render('report/ajax_data_content.html.twig', ['result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, 'is_infouser' => false, 'is_nav' => false, 'is_groupby' => true, 'is_plot' => false, 'is_doc' => false]), 'display_nav' => false, 'title' => $app->trans('Groupement des resultats sur le champ %name%', ['%name%' => $groupField])]);
     }
     //set Limit
     if ($report->getEnableLimit() && '' !== ($page = $request->request->get('page', '')) && '' !== ($limit = $request->request->get('limit', ''))) {
         $report->setLimit($page, $limit);
     } else {
         $report->setLimit(false, false);
     }
     //time to build our report
     if (false === $what) {
         $reportArray = $report->buildReport($conf);
     } else {
         $reportArray = $report->buildReport($conf, $what, $request->request->get('tbl', false));
     }
     return $reportArray;
 }
 /**
  * Display information about a document
  *
  * @param  Request      $request
  * @return JsonResponse
  */
 public function doReportInformationDocument(Request $request)
 {
     $config = ['photo' => [$this->app->trans('report:: document'), 0, 0, 0, 0], 'record_id' => [$this->app->trans('report:: record id'), 0, 0, 0, 0], 'date' => [$this->app->trans('report:: date'), 0, 0, 0, 0], 'type' => [$this->app->trans('phrseanet:: sous definition'), 0, 0, 0, 0], 'titre' => [$this->app->trans('report:: titre'), 0, 0, 0, 0], 'taille' => [$this->app->trans('report:: poids'), 0, 0, 0, 0]];
     $config_dl = ['ddate' => [$this->app->trans('report:: date'), 0, 0, 0, 0], 'user' => [$this->app->trans('report:: utilisateurs'), 0, 0, 0, 0], 'final' => [$this->app->trans('phrseanet:: sous definition'), 0, 0, 0, 0], 'coll_id' => [$this->app->trans('report:: collections'), 0, 0, 0, 0], 'comment' => [$this->app->trans('report:: commentaire'), 0, 0, 0, 0], 'fonction' => [$this->app->trans('report:: fonction'), 0, 0, 0, 0], 'activite' => [$this->app->trans('report:: activite'), 0, 0, 0, 0], 'pays' => [$this->app->trans('report:: pays'), 0, 0, 0, 0], 'societe' => [$this->app->trans('report:: societe'), 0, 0, 0, 0]];
     //format conf according user preferences
     if ('' !== ($columnsList = $request->request->get('list_column', ''))) {
         $new_conf = $config_dl;
         $columns = explode(',', $columnsList);
         foreach (array_keys($config_dl) as $col) {
             if (!in_array($col, $columns)) {
                 unset($new_conf[$col]);
             }
         }
         $config_dl = $new_conf;
     }
     try {
         $record = new \record_adapter($this->app, $request->request->get('sbasid'), $request->request->get('rid'));
     } catch (\Exception $e) {
         $this->app->abort(404);
     }
     $what = new \module_report_nav($this->app, $request->request->get('dmin'), $request->request->get('dmax'), $request->request->get('sbasid'), $request->request->get('collection'));
     $what->setPeriode('');
     $what->setCsv(false);
     $what->setPrint(false);
     /** @var \record_adapter $record */
     $reportArray = $what->buildTabUserWhat($record->get_base_id(), $record->get_record_id(), $config);
     $title = $what->getTitle();
     $html = $this->render('report/ajax_data_content.html.twig', ['result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, 'is_infouser' => false, 'is_nav' => false, 'is_groupby' => false, 'is_plot' => false, 'is_doc' => false]);
     $from = $request->request->get('from', '');
     if ('TOOL' === $from) {
         $what->setTitle('');
         return $this->app->json(['rs' => $html, 'display_nav' => false, 'title' => $title]);
     }
     if ('DASH' !== $from && 'PUSHDOC' !== $from) {
         $download = new \module_report_download($this->app, $request->request->get('dmin'), $request->request->get('dmax'), $request->request->get('sbasid'), $request->request->get('collection'));
         $mapColumnTitleToSqlField = $download->getTransQueryString();
         $currentfilter = [];
         if ('' !== ($serializedFilter = $request->request->get('liste_filter', ''))) {
             $currentfilter = @unserialize(urldecode($serializedFilter));
         }
         $filter = new \module_report_filter($this->app, $currentfilter, $mapColumnTitleToSqlField);
         if ('' !== ($filterColumn = $request->request->get('filter_column', ''))) {
             $field = current(explode(' ', $filterColumn));
             $value = $request->request->get('filter_value', '');
             if ($request->request->get('liste') == 'on') {
                 return $this->app->json(['diag' => $this->render('report/colFilter.html.twig', ['result' => $download->colFilter($field), 'field' => $field]), 'title' => $this->app->trans('filtrer les resultats sur la colonne %colonne%', ['%colonne%' => $field])]);
             }
             if ($field === $value) {
                 $filter->removeFilter($field);
             } else {
                 $filter->addFilter($field, '=', $value);
             }
         }
         $filter->addfilter('record_id', '=', $record->get_record_id());
         $download->setFilter($filter->getTabFilter());
         $download->setOrder('ddate', 'DESC');
         $download->setTitle($this->app->trans('report:: historique des telechargements'));
         $download->setConfig(false);
         $reportArray = $download->buildReport($config_dl);
         if ($request->request->get('printcsv') == 'on') {
             $download->setPrettyString(false);
             return $this->getCSVResponse($download, 'info_document');
         }
         $html .= $this->render('report/ajax_data_content.html.twig', ['result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, 'is_infouser' => false, 'is_nav' => false, 'is_groupby' => false, 'is_plot' => false, 'is_doc' => false]);
         return $this->app->json(['rs' => $html, 'display_nav' => false, 'title' => $title]);
     }
     if ($this->getConf()->get(['registry', 'modules', 'anonymous-report']) == false && $from !== 'DOC' && $from !== 'DASH' && $from !== 'GEN' && $from !== 'PUSHDOC') {
         $conf = ['identifiant' => [$this->app->trans('report:: identifiant'), 0, 0, 0, 0], 'nom' => [$this->app->trans('report:: nom'), 0, 0, 0, 0], 'mail' => [$this->app->trans('report:: email'), 0, 0, 0, 0], 'adresse' => [$this->app->trans('report:: adresse'), 0, 0, 0, 0], 'tel' => [$this->app->trans('report:: telephone'), 0, 0, 0, 0]];
         $info = new \module_report_nav($this->app, $request->request->get('dmin'), $request->request->get('dmax'), $request->request->get('sbasid'), $request->request->get('collection'));
         $info->setPeriode('');
         $info->setConfig(false);
         $info->setTitle($this->app->trans('report:: utilisateur'));
         $reportArray = $info->buildTabGrpInfo(false, [], $request->request->get('user'), $conf, false);
         if ($request->request->get('printcsv') == 'on' && isset($download)) {
             return $this->getCSVResponse($this->app, $info, 'info_user');
         }
         $html .= $this->render('report/ajax_data_content.html.twig', ['result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, 'is_infouser' => false, 'is_nav' => false, 'is_groupby' => false, 'is_plot' => false, 'is_doc' => false]);
         return $this->app->json(['rs' => $html, 'display_nav' => false, 'title' => $title]);
     }
     return $this->app->json(['rs' => $html, 'display_nav' => false, 'title' => $title]);
 }