forena-8.x-1.x-dev/src/File/DataFileSystem.php

src/File/DataFileSystem.php
<?php
namespace Drupal\forena\File;
use Drupal\forena\AppService;
use Drupal\forena\DataManager;
class DataFileSystem extends FileSystemBase {

  public $source = '';
  public $dmSvc;
  /**
   * @param $source
   *   Machine name of Data Source
   * @param $path
   *   Path to sql files for reports.
   * @param DataManager $dataManager
   *   Data Manager object used to get data
   */
  public function __construct($source, $path, DataManager $dataManager) {
    parent::__construct();
    $this->cacheKey = $this->cacheKey . ':' . $source;
    // Load default directory from configuration.
    $this->dmSvc = $dataManager;
    $this->source = $source;
    $data_path = AppService::instance()->dataDirectory();
    $this->source = $source;
    $this->dir = rtrim($data_path, '/');
    $this->includes[] = $path;
  }


  /**
   * List all data blocks a sure has access to.
   * 
   * @return array
   *   Array of data blocks.
   */
  public function userBlocks($search = '*') {
    $blocks = array();
    $this->validateAllCache();
    $sql = $this->getCache('sql');
    $inc = $this->getCache('inc');
    $xml = $this->getCache('xml');
    $data = array_merge($xml, $sql, $inc);
    if ($data) foreach ($data as $base_name => $obj) {

  	  if ($search == '*' || drupal_match_path($base_name, $search)) {
        if ($obj->cache) {
    	    $r = $this->dmSvc->repository($obj->cache['provider']);
    	    if ($r && $r->access($obj->cache['access'])) {
            $blocks[$base_name] = $obj;
    	    }
        }
  	  }
    }
    uksort($blocks, '\Drupal\forena\File\DataFile::blockCompare');
    return $blocks;
  }


  /**
   * Sort compare function for sorting data by category then title.
   * @param string $a
   * @param string $b
   * @return number
   */
  static public function blockCompare($a, $b) {
    $c = strnatcasecmp($a, $b);
    return $c;
  }

  /**
   * @param $object
   * @return array
   * Extract data from an SQL file.
   */
  public function parseSQLFile($object) {
    $file = file_get_contents($object->file);
    $src = $this->dmSvc->parseSQL($file);
    $metaData = [
      'provider' => $this->source,
      'name' => $this->source . '/' . $this->base_name,
      'access' => @$src['access'],
      'options' => @$src['options'],
    ];
    return $metaData;
  }

  /**
   * Should load cache data based on that.
   * @see FrxFile::buildCache()
   */
  public function extractMetaData(&$object) {
    switch($object->ext) {
      case 'sql':
        $object->metaData = $this->parseSQLFile($object);
        break;
    }
  }


}

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

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