View source
<?php
include_once 'commons_wikis.features.inc';
function commons_wikis_module_implements_alter(&$implementations, $hook) {
if ($hook == 'menu_alter') {
$group = $implementations['commons_wikis'];
unset($implementations['commons_wikis']);
$implementations['commons_wikis'] = $group;
}
}
function commons_wikis_menu_alter(&$items) {
$items['node/%node/revisions']['access arguments'][] = $items['node/%node/revisions']['access callback'];
$items['node/%node/revisions']['access callback'] = 'commons_wikis_user_revision_access';
$items['node/%node/revisions/%/view']['access arguments'][] = $items['node/%node/revisions/%/view']['access callback'];
$items['node/%node/revisions/%/view']['access callback'] = 'commons_wikis_user_revision_access';
}
function commons_wikis_user_revision_access($node = NULL, $old_callback = '_node_revision_access') {
if ($node->type == 'wiki') {
if (isset($node->og_group_ref[LANGUAGE_NONE][0]['target_id'])) {
return og_user_access('node', $node->og_group_ref[LANGUAGE_NONE][0]['target_id'], 'update any wiki content');
}
elseif (isset($node->og_user_group_ref[LANGUAGE_NONE][0]['target_id'])) {
return og_user_access('user', $node->og_user_group_ref[LANGUAGE_NONE][0]['target_id'], 'update any wiki content');
}
}
return $old_callback($node, 'view');
}
function commons_wikis_og_user_access_alter(&$temp_perm, $context) {
if ($context['string'] != 'update any wiki content') {
return;
}
$account = $context['account'];
$group = $context['group'];
$group_type = $context['group_type'];
$wrapper = entity_metadata_wrapper($group_type, $group);
$entity_id = $wrapper
->getIdentifier();
$group_content_restricted = (bool) (!isset($wrapper->field_og_subscribe_settings)) || isset($wrapper->field_og_subscribe_settings) && $wrapper->field_og_subscribe_settings
->value() != 'anyone';
$user_is_member = (bool) og_is_member($group_type, $entity_id, 'user', $account, array(
OG_STATE_ACTIVE,
));
if (user_access('edit any wiki content', $account) && (!$group_content_restricted || $user_is_member)) {
$temp_perm['update any wiki content'] = TRUE;
}
}
function commons_wikis_form_node_form_alter(&$form, &$form_state, $form_id) {
$node = $form['#node'];
list(, , $bundle) = entity_extract_ids('node', $node);
if ($bundle == 'wiki' && empty($node->nid)) {
drupal_set_title(t('Create a wiki'));
}
}
function commons_wikis_form_commons_bw_partial_node_form_alter(&$form, &$form_state) {
if (empty($form['#entity']) || $form['#entity']->type != 'wiki') {
return;
}
$form['title']['#markup'] = t('Create a wiki');
$language = $form['title_field']['#language'];
$form['title_field'][$language][0]['value']['#title_display'] = 'invisible';
$form['title_field'][$language][0]['value']['#placeholder'] = t('Enter a Wiki title');
$language = $form['body']['#language'];
$form['body'][$language][0]['#title_display'] = 'invisible';
$form['body'][$language][0]['#resizable'] = FALSE;
$form['title_field']['#attributes']['class'][] = 'trigger-field';
foreach (array(
'body',
'og_group_ref',
'actions',
) as $field) {
if (isset($form[$field])) {
$form[$field]['#attributes']['class'][] = 'hideable-field';
}
}
$form['actions']['submit']['#value'] = t('Create');
$form['#pre_render'][] = 'commons_wikis_form_commons_bw_partial_node_form_after_build';
}
function commons_wikis_form_commons_bw_partial_node_form_after_build($form) {
$language = $form['body']['#language'];
$form['body'][$language][0]['value']['#rows'] = 10;
return $form;
}
function commons_wikis_strongarm_alter(&$items) {
foreach (array(
'commons_radioactivity_entity_types',
'commons_groups_entity_types',
) as $key) {
if (isset($items[$key])) {
$items[$key]->value['node']['wiki'] = 1;
}
}
}
function commons_wikis_node_update($node) {
if ($node->type == 'wiki' && module_exists('message')) {
global $user;
commons_groups_first_contribution($user, $node);
$message = message_create('commons_wikis_wiki_updated', array(
'uid' => $user->uid,
'timestamp' => REQUEST_TIME,
));
$wrapper = entity_metadata_wrapper('message', $message);
$wrapper->field_target_nodes[] = $node;
$wrapper
->save();
}
}
function commons_wikis_views_pre_render(&$view) {
if (empty($view->args[0]) && $view->name == 'commons_bw_wikis') {
$view->display_handler->handlers['empty']['area']->options['content'] = t('No wikis have been created.');
}
}