Now all modules are in core modules folder
This commit is contained in:
parent
5ba1cdfa0b
commit
05b6a91b0c
1907 changed files with 0 additions and 0 deletions
169
modules/vppr/vppr.module
Normal file
169
modules/vppr/vppr.module
Normal file
|
@ -0,0 +1,169 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Vocabulary Permissions Per Role
|
||||
*
|
||||
* Allows adding to/editing terms of/removing terms from vocabularies per role.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of hook_menu_alter().
|
||||
*/
|
||||
function vppr_menu_alter(&$items) {
|
||||
// Taxonomy overview page: http://d6.l/admin/content/taxonomy
|
||||
$items['admin/content/taxonomy']['access callback'] = '_vppr_access_taxonomy';
|
||||
$items['admin/content/taxonomy']['page callback'] = '_vppr_page_taxonomy_overview';
|
||||
// Add terms: http://d6.l/admin/content/taxonomy/$vid/add/term
|
||||
$items['admin/content/taxonomy/%taxonomy_vocabulary/add/term']['access callback'] = '_vppr_access_vocabulary';
|
||||
$items['admin/content/taxonomy/%taxonomy_vocabulary/add/term']['access arguments'] = array(3);
|
||||
// Reorder terms: http://d6.l/admin/content/taxonomy/$vid
|
||||
$items['admin/content/taxonomy/%taxonomy_vocabulary']['access callback'] = '_vppr_access_vocabulary';
|
||||
$items['admin/content/taxonomy/%taxonomy_vocabulary']['access arguments'] = array(3);
|
||||
// Edit and delete terms: http://d6.l/admin/content/taxonomy/edit/term/$tid - warning: there's only a tid arg!
|
||||
$items['admin/content/taxonomy/edit/term']['access callback'] = '_vppr_access_term';
|
||||
$items['admin/content/taxonomy/edit/term']['access arguments'] = array(5);
|
||||
}
|
||||
|
||||
/**
|
||||
* VPPR's access callback for taxonomy overview page (main entry point).
|
||||
*
|
||||
* Grants access to taxonomy overview page even if $user has access to any of
|
||||
* the vocabularies.
|
||||
*/
|
||||
function _vppr_access_taxonomy() {
|
||||
if (user_access('administer taxonomy')) {
|
||||
return TRUE;
|
||||
}
|
||||
global $user;
|
||||
$perms = variable_get('vppr_perms', array(array()));
|
||||
foreach ($perms as $perm) {
|
||||
$diff = array_intersect(array_keys($perm), array_keys($user->roles));
|
||||
if (!empty($diff)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* VPPR's access callback for vocabularies (add and reorder terms).
|
||||
*/
|
||||
function _vppr_access_vocabulary($vocab) {
|
||||
if (user_access('administer taxonomy')) {
|
||||
return TRUE;
|
||||
}
|
||||
global $user;
|
||||
$perms = variable_get('vppr_perms', array(array()));
|
||||
foreach ($user->roles as $rid => $role) {
|
||||
if (isset($perms[$vocab->vid]) && isset($perms[$vocab->vid][$rid]) && $perms[$vocab->vid][$rid]) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* VPPR's access callback for term ID's (edit and delete terms).
|
||||
*/
|
||||
function _vppr_access_term($tid) {
|
||||
if (user_access('administer taxonomy')) {
|
||||
return TRUE;
|
||||
}
|
||||
$term = taxonomy_get_term($tid);
|
||||
// Speed up things if there is no such term.
|
||||
if (!$term) {
|
||||
return FALSE;
|
||||
}
|
||||
global $user;
|
||||
$perms = variable_get('vppr_perms', array(array()));
|
||||
foreach ($user->roles as $rid => $role) {
|
||||
if (isset($perms[$term->vid]) && isset($perms[$term->vid][$rid]) && $perms[$term->vid][$rid]) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_perm().
|
||||
*/
|
||||
function vppr_perm() {
|
||||
return array('administer VPPR');
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_menu().
|
||||
*/
|
||||
function vppr_menu() {
|
||||
$items = array();
|
||||
$items['admin/settings/vppr'] = array(
|
||||
'title' => 'Vocabulary permissions',
|
||||
'page callback' => 'drupal_get_form',
|
||||
'page arguments' => array('vppr_form_admin_settings_vppr'),
|
||||
'access arguments' => array('administer VPPR'),
|
||||
'file' => 'vppr.admin.inc',
|
||||
'type' => MENU_NORMAL_ITEM,
|
||||
);
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_theme().
|
||||
*/
|
||||
function vppr_theme() {
|
||||
return array(
|
||||
'vppr_form_admin_settings_vppr' => array(
|
||||
'arguments' => array('form' => array()),
|
||||
'file' => 'vppr.admin.inc',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Page callback for taxonomy overview.
|
||||
*
|
||||
* Displays the form core ships if $user has 'administer taxonomy' permission,
|
||||
* or a simple list that mimics the same otherwise. Rationale: don't display
|
||||
* even a stripped-down form if we don't need a form but only a
|
||||
* nicely-formatted list.
|
||||
*
|
||||
* @see taxonomy_overview_vocabularies()
|
||||
*/
|
||||
function _vppr_page_taxonomy_overview($form_id) {
|
||||
// If $user has 'administer taxonomy', then do not do anything, just bail
|
||||
// out early with the untouched form.
|
||||
if (user_access('administer taxonomy')) {
|
||||
return drupal_get_form($form_id);
|
||||
}
|
||||
$header = array(
|
||||
t('Name'),
|
||||
t('Type'),
|
||||
array(
|
||||
'data' => t('Operations'),
|
||||
'colspan' => '2',
|
||||
),
|
||||
);
|
||||
$rows = array();
|
||||
$vocabularies = taxonomy_get_vocabularies();
|
||||
foreach ($vocabularies as $vocabulary) {
|
||||
if (!_vppr_access_vocabulary($vocabulary)) {
|
||||
continue;
|
||||
}
|
||||
$types = array();
|
||||
foreach ($vocabulary->nodes as $type) {
|
||||
$node_type = node_get_types('name', $type);
|
||||
$types[] = $node_type ? check_plain($node_type) : check_plain($type);
|
||||
}
|
||||
$rows[] = array(
|
||||
check_plain($vocabulary->name),
|
||||
implode(', ', $types),
|
||||
l(t('list terms'), "admin/content/taxonomy/$vocabulary->vid"),
|
||||
l(t('add terms'), "admin/content/taxonomy/$vocabulary->vid/add/term"),
|
||||
);
|
||||
}
|
||||
if (empty($rows)) {
|
||||
$rows[] = array(array('data' => t('No vocabularies available.'), 'colspan' => '4'));
|
||||
}
|
||||
return theme('table', $header, $rows);
|
||||
}
|
Reference in a new issue