forena-8.x-1.x-dev/src/Controller/ForenaController.php

src/Controller/ForenaController.php
<?php

namespace Drupal\forena\Controller;

use Drupal\Core\Ajax\AfterCommand;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\AppendCommand;
use Drupal\Core\Ajax\BeforeCommand;
use Drupal\Core\Ajax\HtmlCommand;
use Drupal\Core\Ajax\OpenModalDialogCommand;
use Drupal\Core\Ajax\ReplaceCommand;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Url;
use Drupal\forena\DocManager;
use Drupal\forena\File\ReportFileSystem;
use Drupal\forena\Frx;
use Drupal\forena\ReportManager;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class ForenaController extends ControllerBase {

  /**
   * Render a single report.
   * 
   * @param $report
   * @return array | string
   */
  public function report($report) {
    $content = ReportManager::instance()->report($report, $_GET);
    $d = DocManager::instance();
    $doc_type = $d->getDocumentType();
    switch ($doc_type) {
      case 'drupal':
      case 'email':
        if ($content === FALSE) throw new AccessDeniedHttpException();
        if (!$content) throw new NotFoundHttpException();
        return $content;
        break;
      default:
        $response = new Response();
        $doc = $d->getDocument();
        if ($doc->headers) {
          foreach ($doc->headers as $k => $header) {
            $response->headers->set($k, $header);
          }
        }
        $response->setContent($content);
        return $response;
    }
  }

  /**
   * Ajax callback handler for ajax requests.
   *
   * @param String $report
   *   Name of Report.
   * @param String $js_mode
   *   Either nojs to imply disabled javascript or ajax to perform replacement.
   * @param string $command
   *   Type of replacement that is to be performed.
   * @param string $id
   *   ID to replace.
   * @return \Drupal\Core\Ajax\AjaxResponse|array
   */
  public function ajaxReport($report, $js_mode, $id='report', $command='html') {
    $report = $this->report($report);
    if ($js_mode == 'ajax') {
      $reponse = new AjaxResponse();
      $commands = Frx::instance()->getDocument()->getAjaxCommands();
      if (isset($commands['pre'])) foreach($commands['pre'] as $cmd) {
        $reponse->addCommand($cmd);
      }
      switch ($command) {
        case 'after':
          $reponse->addCommand(new AfterCommand("#$id", $report));
          break;
        case 'append':
          $reponse->addCommand(new AppendCommand("#$id", $report));
          break;
        case 'modal':
          $reponse->addCommand(new OpenModalDialogCommand($report['title'], $report));
          break;
        case 'before':
          $reponse->addCommand(new BeforeCommand("#$id", $report));
          break;
        case 'html':
          $reponse->addCommand(new HtmlCommand("#$id", $report));
          break;
        case 'replace':
          $reponse->addCommand(new ReplaceCommand("#$id", $report));
          break;
      }
      if (isset($commands['post'])) foreach($commands['post'] as $cmd) {
        $reponse->addCommand($cmd);
      }
      return $reponse;

    }
    else {
      return $report;
    }
  }

  /**
   * Generate the list of user reports.
   * 
   * @return string
   */
  public function listUserReports() {
    $content=[];
    $reports = ReportFileSystem::instance()->reportsByCategory();

    if (!$reports) {
      $content = ['#type' => 'html_tag', '#value' => 'No Reports Found', '#tag' => 'p'];
    }
    else {

      $links = [];
      $output = '';
      foreach ($reports as $category => $cat_reports) {
        $links[] =  '<li><a href="#' . urlencode($category) . '">' . $category . '</a></li> ';
        $output .= '<h3 id="' . urlencode($category) . '">' . $category . '</h3>';
        $output .= '<ul>';
        foreach ($cat_reports as $r) {
          $report = str_replace('/', '.', $r['report_name']);
          $parms = ['report' => $report];
          $output .= '<li>' . $this->l($r['title'], Url::fromRoute('forena.report', $parms)) . '</li>';
        }
        $output .= '</ul>';
      }
      $content['#markup'] = $output;
    }
     return $content;
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc