You are here

imce_dir_man.module in IMCE Tools 7

Same filename and directory in other branches
  1. 6 imce_dir_man/imce_dir_man.module

imce_dir_man.module provides functions for managing configuration determining what the imce_dir_man_path() function. This function can be used as php code in the directory setting of an IMCE profile to allow for per user configuration of directory restrictions

File

imce_dir_man/imce_dir_man.module
View source
<?php

/**
 * @file
 * imce_dir_man.module provides functions for managing configuration
 * determining what the imce_dir_man_path() function. This function can
 * be used as php code in the directory setting of an IMCE profile to 
 * allow for per user configuration of directory restrictions
 */

/**
 * hook menu
 */
function imce_dir_man_menu() {
  $menu['admin/config/media/imce_dir_man'] = array(
    'title' => 'IMCE User Directory Access Manager',
    'description' => 'Administer directory restrictions for IMCE',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'imce_dir_man_form',
    ),
    'access arguments' => array(
      'administer site configuration',
    ),
  );
  return $menu;
}

/**
 * generates admin form for managing user directory restrictions
 */
function imce_dir_man_form() {
  $query = db_select('imce_dir_man', 'i');
  $query
    ->join('users', 'u', 'u.uid = i.uid');
  $res = $query
    ->fields('i', array(
    'uid',
    'dir',
  ))
    ->fields('u', array(
    'name',
  ))
    ->orderBy('name')
    ->execute();
  $weight = 1;
  foreach ($res as $row) {
    $form[$row->uid] = array(
      '#title' => t('User @name', array(
        '@name' => $row->name,
      )),
      '#type' => 'fieldset',
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
      '#tree' => TRUE,
      '#weight' => $weight++,
    );
    $form[$row->uid]['del'] = array(
      '#title' => t('Remove restrictions'),
      '#description' => t('Deletes restrictions set for this user'),
      '#type' => 'checkbox',
      '#weight' => 10,
    );
    $form[$row->uid]['dir'] = array(
      '#title' => t('Directory'),
      '#description' => t('Directory to restrict user to relative to site file upload root, comma separate to specify multiple directories, a/b/c restricts a user to !root/a/b/c', array(
        '!root' => variable_get('file_public_path', conf_path() . '/files'),
      )),
      '#type' => 'textfield',
      '#size' => '100',
      '#maxsize' => '255',
      '#default_value' => $row->dir,
      '#weight' => 20,
    );
  }
  $form['new_user'] = array(
    '#title' => t('Add restriction for new user'),
    '#type' => 'fieldset',
    '#tree' => TRUE,
    '#weight' => $weight++,
  );
  $form['new_user']['name'] = array(
    '#title' => t('User'),
    '#type' => 'textfield',
    '#size' => '100',
    '#maxsize' => '255',
    '#weight' => 10,
  );
  $form['new_user']['dir'] = array(
    '#title' => t('Directory'),
    '#type' => 'textfield',
    '#description' => t('Directory to restrict user to relative to site file upload root, comma separate to specify multiple directories, a/b/c restricts a user to sites/default/files/a/b/c'),
    '#size' => '100',
    '#maxsize' => '255',
    '#weight' => 20,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Save',
    '#weight' => $weight,
  );
  $form['#submit'] = array(
    'imce_dir_man_form_submit',
  );
  $form['#validate'] = array(
    'imce_dir_man_form_validate',
  );
  return $form;
}

/**
 * Validate restriction form (imce_dir_man_form) settings
 */
function imce_dir_man_form_validate($form, &$form_state) {
  foreach ($form_state['values'] as $uid => $data) {
    $data['dir'] = trim($data['dir'], ',');
    if ($data['dir'] == '' && (isset($data['del']) && $data['del'] != 1) && $data['name'] != '') {
      form_set_error($uid . '][dir', t('Invalid directory restriction (blank or contains only commas)'));
    }
    else {
      if ($uid == 'new_user' && $data['name'] != '') {
        $uid = db_select('users', 'u')
          ->fields('u', array(
          'uid',
        ))
          ->condition('name', $data['name'])
          ->execute()
          ->fetchCol();
        if (!$uid) {
          form_set_error($uid . '][name', t('Invalid user'));
        }
        else {
          $uid = db_select('imce_dir_man', 'i')
            ->fields('i', array(
            'uid',
          ))
            ->condition('uid', $uid[0])
            ->execute()
            ->fetchCol();
          if ($uid) {
            form_set_error($uid . '][name', t('User @name already has restriction configured, please update their entry to make modifications', array(
              '@name' => $data['name'],
            )));
          }
        }
      }
    }
  }
}

/**
 * Save configured restriction settings adding new settings, 
 * updating or deleting existing settings
 */
function imce_dir_man_form_submit($form, &$form_state) {
  $rec = new stdclass();
  foreach ($form_state['values'] as $uid => $data) {
    $rec->dir = trim($data['dir'], ',');
    $rec->uid = $uid;
    if ($uid == 'new_user' && $data['name'] != '' && $data['dir'] != '') {
      $uid = db_select('users', 'u')
        ->fields('u', array(
        'uid',
      ))
        ->condition('name', $data['name'])
        ->execute()
        ->fetchCol();
      if ($uid) {
        $rec->uid = $uid[0];
        drupal_write_record('imce_dir_man', $rec);
      }
    }
    else {
      if (isset($data['del']) && $data['del']) {
        db_delete('imce_dir_man')
          ->condition('uid', $uid)
          ->execute();
      }
      else {
        drupal_write_record('imce_dir_man', $rec, array(
          'uid',
        ));
      }
    }
  }
}

/**
 * returns an array representing a user's currently accessible file directories
 * used by the imce uploader
 * If a user has not been restricted in the configuration, . (all directories)
 * is returned
 */
function imce_dir_man_path() {
  global $user;
  $dir = db_select('imce_dir_man', 'i')
    ->fields('i', array(
    'dir',
  ))
    ->condition('uid', $user->uid)
    ->execute()
    ->fetchCol();
  if (!$dir || !$dir[0]) {
    $dir[0] = '.';
  }
  return preg_split('/,/', $dir[0]);
}

Functions

Namesort descending Description
imce_dir_man_form generates admin form for managing user directory restrictions
imce_dir_man_form_submit Save configured restriction settings adding new settings, updating or deleting existing settings
imce_dir_man_form_validate Validate restriction form (imce_dir_man_form) settings
imce_dir_man_menu hook menu
imce_dir_man_path returns an array representing a user's currently accessible file directories used by the imce uploader If a user has not been restricted in the configuration, . (all directories) is returned