forena-8.x-1.x-dev/forena_query/forena_query.module

forena_query/forena_query.module
<?php
/**
 * @file
 * Provides the ability to create saved queries
 * and to test sql data blocks.
 */

/**
 * Implementation of hook_menu
 */
function forena_query_menu() {
  $items = array();

  $items['admin/structure/forena/data/add'] = array(
  	'type' => MENU_CALLBACK,
    'title' => 'Create new SQL Query',
    'access arguments' => array('build forena sql blocks'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('forena_query_create_block_form'),
    'file' => 'forena_query.inc',
  );

  $items['admin/structure/forena/data/%/edit']  = array(
    'type' => MENU_CALLBACK,
    'title' => 'SQL Editor',
    'access callback' => 'forena_query_editor_access',
    'access arguments' => array(4, 'create'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('forena_query_editor', 4),
    'file' => 'forena_query.inc',
  );

  $items['admin/structure/forena/data/%/delete']  = array(
      'type' => MENU_CALLBACK,
      'title' => 'Delete/Revert Custom Data Query',
      'access callback' => 'forena_query_editor_access',
      'access arguments' => array(4, 'delete'),
      'page callback' => 'drupal_get_form',
      'page arguments' => array('forena_query_delete_form', 4),
      'file' => 'forena_query.inc',
  );

  $items['forena-query/table_autocomplete'] = array(
  	'type' => MENU_CALLBACK,
    'access arguments' => array('build forena sql blocks'),
    'page callback' => 'forena_query_autocomplete',
    'file' => 'forena_query.inc'
  );

  $items['forena-query/table_autocomplete_simple'] = array(
      'type' => MENU_CALLBACK,
      'access arguments' => array('build forena sql blocks'),
      'page callback' => 'forena_query_autocomplete_simple',
      'file' => 'forena_query.inc',
  );

  return $items;
}

/**
 * Access function based on data b
 * @param unknown $block_name
 * @param string $action
 * @return boolean
 */
function forena_query_editor_access($block_name, $action='create') {
  $block_name = str_replace('.', '/', $block_name);
  @list($provider,$block) = explode('/', $block_name);
  return \Drupal::currentUser()->hasPermission("access $provider data")  && \Drupal::currentUser()->hasPermission("$action $provider blocks");
}


/**
 * Implementation of hook_permission
 */
function forena_query_permission() {
  $perms =  array(
    'build forena sql blocks' => array('title' => 'Build Forena Data Blocks using SQL',
    	'description' => 'Direct access to SQL should not be given without understanding of security ramifications'),
      'forena data security' => array('title' => 'Manage data security',
      'description' => 'Allows to create new data queries and alter security on saved queries.') ,
  );
  foreach (Frx::RepoMan()->repositories as $repos => $conf) {
    $name = $conf['title'] ? $conf['title'] : $repos;
    $perms['create '. $repos . ' blocks'] = array('title' =>  'Create ' . $name . ' Data Blocks');
    $perms['delete '. $repos . ' blocks'] = array('title' =>  'Delete ' . $name . ' Data Blocks');

  }
  return $perms;
}

/**
 * Implmentation of hook_requirements
 * @param unknown $phase
 */
function forena_query_requirements($phase) {
  $requirements = array();
  switch ($phase) {
  	case 'runtime':
  	  $writeable = is_writable(Frx::DataFile()->dir);
  	  if (!$writeable) {
    	  $requirements['fornea_writable'] = array(
    	      'title' => 'Forena Data Directory',
    	      'value' => Frx::File()->dir,
    	      'severity' => REQUIREMENT_ERROR,
    	      'description' => t('The directory must be writable by the web user in order to create custom SQL data sources. '),
    	  ) ;
  	  }
  }
}

function forena_query_forena_query_builders() {

  return array(
  	'FrxQueryBuilder' => array('class' => 'FrxQueryBuilder',
       'file' => 'builders/FrxQueryBuilder.inc'),
  );
}


/**
 * Return permission as to whether the user can save data
 * in the repository.
 * @param $repos string
 * @return bool 
 *   Indicates whether user has access tor data repos. 
 */
function forena_query_access_repository($repos) {
  @list($repos, $block) = @explode('/', $repos, 2);
  return \Drupal::currentUser()->hasPermission('create ' . $repos . ' blocks');
}

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

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