View source
<?php
include_once 'commons_trusted_contacts.features.inc';
function commons_trusted_contacts_system_info_alter(&$info, $file, $type) {
if ($file->name == 'commons_trusted_contacts') {
$info['features']['field_instance'][] = "user-user-group_group";
$group_content_entity_types = commons_groups_get_group_content_entity_types(FALSE);
if (isset($group_content_entity_types['node'])) {
foreach (array_keys($group_content_entity_types['node']) as $bundle) {
$info['features']['field_instance'][] = "node-{$bundle}-og_user_group_ref";
}
}
}
}
function commons_trusted_contacts_user_presave(&$edit, $account, $category) {
if (empty($edit['group_access'][LANGUAGE_NONE])) {
$edit['group_access'][LANGUAGE_NONE][0]['value'] = 0;
}
}
function commons_trusted_contacts_pathauto_alias_alter(&$alias, &$context) {
if ($context['module'] != 'node') {
return;
}
if (og_get_group_type('node', $context['data']['node']->type, 'group content') && !empty($context['data']['node']->og_user_group_ref[LANGUAGE_NONE])) {
$alias = token_replace('users/[node:author:name]/trusted-content/[node:title]', $context['data'], array(
'sanitize' => FALSE,
'clear' => TRUE,
'callback' => 'pathauto_clean_token_values',
'language' => (object) array(
'language' => $context['language'],
),
'pathauto' => TRUE,
));
}
}
function commons_trusted_contacts_menu() {
$items = array();
$items['admin/people/trusted-contacts-upgrade'] = array(
'page callback' => 'commons_trusted_contacts_users_upgrade_batch_init',
'access arguments' => array(
'administer site configuration',
),
'type' => MENU_CALLBACK,
);
$items['request-trust/%user/%/%'] = array(
'page callback' => 'commons_trusted_contacts_request_trust',
'page arguments' => array(
1,
3,
),
'access callback' => 'commons_trusted_contacts_request_trust_access',
'access arguments' => array(
1,
2,
),
'type' => MENU_CALLBACK,
);
$items['un-trust/%user/%/%'] = array(
'page callback' => 'commons_trusted_contacts_un_trust',
'page arguments' => array(
1,
3,
),
'access callback' => 'commons_trusted_contacts_un_trust_access',
'access arguments' => array(
1,
2,
),
'type' => MENU_CALLBACK,
);
$items['approve-trust/%entity_object/%'] = array(
'load arguments' => array(
'og_membership',
),
'page callback' => 'commons_trusted_contacts_approve_trust',
'page arguments' => array(
1,
),
'access callback' => 'commons_trusted_contacts_approve_trust_access',
'access arguments' => array(
1,
2,
),
'type' => MENU_CALLBACK,
);
$items['ignore-trust/%entity_object/%'] = array(
'load arguments' => array(
'og_membership',
),
'page callback' => 'commons_trusted_contacts_ignore_trust',
'page arguments' => array(
1,
),
'access callback' => 'commons_trusted_contacts_ignore_trust_access',
'access arguments' => array(
1,
2,
),
'type' => MENU_CALLBACK,
);
$items['user/%user/contacts/messages/popup/%user'] = array(
'page callback' => 'drupal_get_form',
'page arguments' => array(
'commons_trusted_contacts_messages_popup',
5,
),
'access callback' => 'commons_trusted_contacts_privatemsg_write_access',
'access arguments' => array(
5,
),
'type' => MENU_CALLBACK,
);
$items['user/%user/contacts'] = array(
'title' => t('Private Messages & Invitations'),
'page callback' => 'commons_trusted_contacts_tab',
'access callback' => 'commons_trusted_contacts_tab_access',
'access arguments' => array(
1,
),
'type' => MENU_LOCAL_TASK,
);
return $items;
}
function commons_trusted_contacts_tab_access($account) {
global $user;
if (user_access('administer group')) {
return TRUE;
}
if ($user->uid == $account->uid) {
return TRUE;
}
return FALSE;
}
function commons_trusted_contacts_menu_alter(&$items) {
$items['user/%/group']['access callback'] = FALSE;
$items['messages/new']['access callback'] = 'commons_trusted_contacts_privatemsg_write_access';
$items['messages/new']['access arguments'] = array(
2,
);
unset($items['messages']);
unset($items['messages/list']);
}
function commons_trusted_contacts_admin_paths() {
$paths = array(
'user/*/contacts/messages/popup/*' => TRUE,
);
return $paths;
}
function commons_trusted_contacts_module_implements_alter(&$implementations, $hook) {
if ($hook == 'form_alter') {
$group = $implementations['commons_trusted_contacts'];
unset($implementations['commons_trusted_contacts']);
$implementations['commons_trusted_contacts'] = $group;
}
if ($hook == 'node_presave') {
$group = $implementations['commons_trusted_contacts'];
unset($implementations['commons_trusted_contacts']);
$implementations['commons_trusted_contacts'] = $group;
}
}
function commons_trusted_contacts_form_user_admin_settings_alter(&$form, &$form_state) {
$form['commons_trusted_contacts'] = array(
'#type' => 'fieldset',
'#title' => t('Commons Trusted Contacts'),
'#weight' => 0,
'#description' => t("Important! Lowering this number will restrict users over the new limit from adding or approving any trusted contacts until they go below it."),
);
$form['commons_trusted_contacts']['commons_trusted_contacts_limit'] = array(
'#type' => 'textfield',
'#title' => t('Maximum number of trusted contacts per user'),
'#default_value' => variable_get('commons_trusted_contacts_limit', 1000),
'#description' => t('This setting defaults to 1000 maximum contacts for performance reasons, and should be sufficient for most sites. Set to 0 for no limit.'),
);
$form['commons_trusted_contacts']['commons_trusted_contacts_global_messaging'] = array(
'#type' => 'checkbox',
'#title' => t('Allow users to message each other regardless if they are a trusted contact'),
'#default_value' => variable_get('commons_trusted_contacts_global_messaging', FALSE),
);
}
function commons_trusted_contacts_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'privatemsg_new') {
$form['recipient']['#access'] = FALSE;
}
if ($form_id == 'views_form_trusted_contacts_invitations_default') {
if (empty($form_state['build_info']['args'][0]->result)) {
$form['select']['#access'] = FALSE;
}
}
if ($form_id == 'views_form_trusted_contacts_default') {
if (empty($form_state['build_info']['args'][0]->result)) {
$form['select']['#access'] = FALSE;
}
}
if ($form_id == 'privatemsg_list') {
form_load_include($form_state, 'inc', 'privatemsg', 'privatemsg.pages');
}
}
function commons_trusted_contacts_tab() {
global $user;
$account = $user;
$tabs = array();
$view = views_get_view('trusted_contacts');
$view->get_total_rows = TRUE;
$view
->execute();
$tabs['contacts'] = array(
'title' => t('Trusted Contacts') . ' <span class="commons-bw-result-count">' . $view->total_rows . '</span>',
'contents' => views_embed_view('trusted_contacts'),
);
module_load_include('inc', 'privatemsg', 'privatemsg.pages');
$tabs['messages'] = array(
'title' => t('Messages') . ' <span class="commons-bw-result-count">' . privatemsg_unread_count($account) . '</span>',
'contents' => privatemsg_list_page(),
);
$tabs['invitations'] = array(
'title' => t('Invitations') . ' <span class="commons-bw-result-count">' . count(commons_trusted_contacts_get_pending_invitations($account->uid)) . '</span>',
'contents' => views_embed_view('trusted_contacts_invitations'),
);
$settings = array(
'style' => 'Commons Tabs',
'ajax' => FALSE,
'html' => TRUE,
'default_tab' => 'invitations',
);
return quicktabs_build_quicktabs('commons_trusted_contacts', $settings, $tabs);
}
function commons_trusted_contacts_field_formatter_info() {
return array(
'trusted_contact' => array(
'label' => t('Trusted Contact'),
'field types' => array(
'list_boolean',
),
'settings' => array(
'field_name' => FALSE,
),
),
'approve_ignore' => array(
'label' => t('Approve/Ignore request'),
'field types' => array(
'text',
),
),
);
}
function commons_trusted_contacts_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
global $user;
$element = array();
$element[0] = array(
'#type' => 'container',
'#attributes' => array(),
);
$links = array();
$settings = $display['settings'];
switch ($display['type']) {
case 'trusted_contact':
$account = clone $user;
if (!og_is_group($entity_type, $entity)) {
return;
}
list($id, , $bundle) = entity_extract_ids($entity_type, $entity);
$user_is_active_member = og_is_member($entity_type, $id, 'user', $account, array(
OG_STATE_ACTIVE,
));
if (!$account->uid || !og_user_access('user', $entity->uid, 'subscribe') && !$user_is_active_member) {
return;
}
if (!empty($entity->uid) && $entity->uid == $account->uid) {
return;
}
if (variable_get('commons_trusted_contacts_global_messaging', FALSE) || $user_is_active_member) {
$link = array(
'#type' => 'link',
);
$link['#title'] = t('Message');
$link['#href'] = 'user/' . $user->uid . '/contacts/messages/popup/' . $id;
$link['#options'] = array();
$element[0][] = $link;
}
if (og_is_member($entity_type, $id, 'user', $account, array(
OG_STATE_BLOCKED,
))) {
return;
}
elseif (og_is_member($entity_type, $id, 'user', $account, array(
OG_STATE_PENDING,
))) {
$link = array(
'#theme' => 'html_tag__request_pending',
'#tag' => 'span',
'#value' => t('Awaiting confirmation'),
'#attributes' => array(
'class' => array(
'trusted-request-pending',
),
),
);
$element[0][] = $link;
}
elseif (!og_is_member($entity_type, $id, 'user', $account, array(
OG_STATE_ACTIVE,
))) {
if (empty($settings['field_name']) && ($audience_field_name = og_get_best_group_audience_field('user', $account, $entity_type, $bundle))) {
$settings['field_name'] = $audience_field_name;
}
if (!$settings['field_name']) {
return;
}
$field_info = field_info_field($settings['field_name']);
if ($field_info['settings']['target_type'] != $entity_type) {
return;
}
if (!empty($field_info['settings']['handler_settings']['target_bundles']) && !in_array($bundle, $field_info['settings']['handler_settings']['target_bundles'])) {
return;
}
if (!og_check_field_cardinality('user', $account, $settings['field_name'])) {
$element[0] = array(
'#markup' => format_plural($field_info['cardinality'], 'You are already registered to another group', 'You are already registered to @count groups'),
);
return $element;
}
$token = drupal_get_token('request' . ':' . $id . ':' . $account->uid);
$url = "request-trust/{$id}/{$token}/nojs";
$link = array(
'#type' => 'link',
);
$link['#title'] = t('Add as trusted contact');
if ($account->uid) {
$link['#href'] = $url;
$link['#options'] = array(
'attributes' => array(
'class' => array(
'use-ajax',
),
'id' => 'user-' . $entity->uid,
),
);
$element[0][] = $link;
$element['#attached'] = array(
'library' => array(
array(
'system',
'drupal.ajax',
),
array(
'system',
'jquery.form',
),
),
);
}
else {
$link = array(
'#type' => 'link',
);
$link['#href'] = 'user/login';
$link['#options'] = array(
'query' => array(
'destination' => $url,
),
);
$element[0][] = $link;
}
}
if (count(element_children($element[0]))) {
return $element;
}
break;
case 'approve_ignore':
$approve = l(t('Approve'), 'approve-trust/' . $entity->id . '/' . $items[0]['value']);
$ignore = l(t('Ignore'), 'ignore-trust/' . $entity->id . '/' . $items[0]['value']);
$element[0] = array(
'#markup' => $approve . ' ' . $ignore,
);
return $element;
}
}
function commons_trusted_contacts_og_membership_insert(OgMembership $og_membership) {
if ($og_membership->type != 'trusted_contacts' || $og_membership->group_type != 'user') {
return;
}
if (!empty($og_membership->_skip_membership_insert)) {
return;
}
if ($og_membership->gid == $og_membership->etid) {
return;
}
$token = md5(rand(100000000, 9999999999));
$wrapper = entity_metadata_wrapper('og_membership', $og_membership);
$wrapper->field_my_request
->set(1);
$wrapper->field_membership_token
->set($token);
$values = array(
'entity' => $og_membership->gid,
'field_name' => 'user_trusted_contacts',
'state' => $og_membership->state,
);
$og_membership2 = og_group('user', $og_membership->etid, $values, FALSE);
$wrapper2 = entity_metadata_wrapper('og_membership', $og_membership2);
$wrapper2->field_original_og_membership
->set($og_membership);
$wrapper2->field_my_request
->set(0);
$wrapper2->field_membership_token
->set($token);
$og_membership2->_skip_membership_insert = TRUE;
$wrapper2
->save();
unset($og_membership->is_new);
$og_membership->_skip_membership_update = TRUE;
$wrapper
->save();
}
function commons_trusted_contacts_og_membership_update(OgMembership $og_membership) {
if ($og_membership->type != 'trusted_contacts' || $og_membership->group_type != 'user') {
return;
}
if (!empty($og_membership->_skip_membership_update)) {
return;
}
$wrapper = entity_metadata_wrapper('og_membership', $og_membership);
$wrapper_original = entity_metadata_wrapper('og_membership', $og_membership->original);
$query = new EntityFieldQuery();
$return = $query
->entityCondition('entity_type', 'og_membership')
->propertyCondition('group_type', 'user')
->propertyCondition('entity_type', 'user')
->propertyCondition('etid', $og_membership->gid)
->propertyCondition('gid', $og_membership->etid)
->execute();
if (!isset($return['og_membership'])) {
watchdog('commons_trusted_contacts', "Warning: expected trusted contact link not found between " . $og_membership->gid . " and " . $og_membership->etid, WATCHDOG_WARNING);
return;
}
$membership_id = key($return['og_membership']);
$wrapper2 = entity_metadata_wrapper('og_membership', $membership_id);
$og_membership2 = $wrapper2
->value();
if ($wrapper->state
->value() != $wrapper_original->state
->value()) {
$wrapper2->state
->set($wrapper->state
->value());
if ($wrapper_original->state
->value() == OG_STATE_PENDING) {
$confirmation = $wrapper->state
->value() == OG_STATE_ACTIVE;
$wrapper->field_confirmation
->set($confirmation);
$wrapper->field_response_date
->set(time());
$og_membership->_skip_membership_update = TRUE;
$og_membership_clone = clone $og_membership;
$og_membership_clone
->save();
$account = user_load($og_membership->gid);
}
}
if ($wrapper->field_confirmation
->value() != $wrapper_original->field_confirmation
->value()) {
$wrapper2->field_confirmation
->set($wrapper->field_confirmation
->value());
}
if ($wrapper->field_response_date
->value() != $wrapper_original->field_response_date
->value()) {
$wrapper2->field_response_date
->set($wrapper->field_response_date
->value());
}
$og_membership2->_skip_membership_update = TRUE;
$wrapper2
->save();
}
function commons_trusted_contacts_og_membership_delete(OgMembership $og_membership) {
if ($og_membership->type != 'trusted_contacts' || $og_membership->group_type != 'user') {
return;
}
if (!og_is_member('user', $og_membership->etid, 'user', $og_membership->gid)) {
return;
}
og_ungroup('user', $og_membership->etid, 'user', $og_membership->gid);
}
function commons_trusted_contacts_request_trust($account, $ajax) {
global $user;
$requestor = $user;
if ($account->uid == $user->uid) {
return;
}
if (!commons_trusted_contacts_check_limit($requestor, $account, $ajax)) {
return;
}
$og_membership = og_group('user', $account, array(
'field_name' => 'user_trusted_contacts',
'state' => OG_STATE_PENDING,
));
$wrapper = entity_metadata_wrapper('og_membership', $og_membership);
$token = $wrapper->field_membership_token
->value();
$options = array(
'absolute' => TRUE,
);
$arguments = array(
'@{approve-url}' => url('approve-trust/' . $og_membership->id . '/' . $token, $options),
'@{ignore-url}' => url('ignore-trust/' . $og_membership->id . '/' . $token, $options),
);
$message = message_create('trusted_contact_request_pending', array(
'uid' => $account->uid,
'arguments' => $arguments,
));
$wrapper = entity_metadata_wrapper('message', $message);
$wrapper->field_requesting_user
->set($requestor);
$wrapper
->save();
message_notify_send_message($message);
if ($ajax == 'ajax') {
$commands = array();
$element = array(
'element' => array(
'#value' => t('Awaiting confirmation'),
'#tag' => 'span',
'#attributes' => array(
'class' => array(
'trusted-request-pending',
),
),
),
);
$commands[] = ajax_command_replace('#user-' . $account->uid, trim(theme('html_tag__request_pending', $element)));
$page = array(
'#type' => 'ajax',
'#commands' => $commands,
);
ajax_deliver($page);
}
else {
drupal_goto('user/' . $og_membership->gid);
}
}
function commons_trusted_contacts_un_trust($account, $ajax) {
global $user;
og_ungroup('user', $account->uid);
if ($ajax == 'ajax') {
$token = drupal_get_token('request' . ':' . $account->uid . ':' . $user->uid);
$new = l(t('Trusted Contact'), 'request-trust/' . $account->uid . '/' . $token . '/nojs', array(
'attributes' => array(
'class' => array(
'use-ajax',
),
),
));
$commands = array();
$commands[] = ajax_command_replace(".field-name-group-group a", $new);
$page = array(
'#type' => 'ajax',
'#commands' => $commands,
);
ajax_deliver($page);
}
else {
drupal_goto('user/' . $account->uid);
}
}
function commons_trusted_contacts_approve_trust(OgMembership $og_membership) {
global $user;
if ($og_membership->gid != $user->uid) {
return;
}
$account = user_load($og_membership->gid);
if (!commons_trusted_contacts_check_limit($account, $og_membership->etid)) {
return;
}
$wrapper = entity_metadata_wrapper('og_membership', $og_membership);
$wrapper->state
->set(OG_STATE_ACTIVE);
$wrapper
->save();
$message = message_create('trusted_contact_request_approved', array(
'uid' => $og_membership->etid,
));
$wrapper = entity_metadata_wrapper('message', $message);
$wrapper->field_approving_user
->set($account);
$wrapper
->save();
message_notify_send_message($message);
drupal_goto('user/' . $user->uid . '/contacts', array(
'query' => array(
'qt-commons_trusted_contacts' => 'invitations',
),
));
}
function commons_trusted_contacts_ignore_trust(OgMembership $og_membership) {
global $user;
if ($og_membership->gid != $user->uid) {
return;
}
$wrapper = entity_metadata_wrapper('og_membership', $og_membership);
$wrapper->state
->set(OG_STATE_BLOCKED);
$wrapper
->save();
drupal_goto('user/' . $user->uid . '/contacts', array(
'query' => array(
'qt-commons_trusted_contacts' => 'invitations',
),
));
}
function commons_trusted_contacts_check_limit($requestor, $requestee, $ajax = FALSE) {
if ($contacts_limit = variable_get('commons_trusted_contacts_limit', 1000)) {
$requestor_groups = og_get_entity_groups('user', $requestor, array(
OG_STATE_ACTIVE,
OG_STATE_PENDING,
), 'user_trusted_contacts');
$requestee_groups = og_get_entity_groups('user', $requestee, array(
OG_STATE_ACTIVE,
OG_STATE_PENDING,
), 'user_trusted_contacts');
$requestor_memberships = $requestor_groups['user'] ? count($requestor_groups['user']) : 0;
$requestee_memberships = $requestee_groups['user'] ? count($requestee_groups['user']) : 0;
$message = '';
$exceeds_limit = FALSE;
if ($requestor_memberships > $contacts_limit) {
$exceeds_limit = TRUE;
drupal_set_message(t('You have exceeded the limit of @limit trusted contacts. Before you can add more contacts, you must <a href="@remove-contacts-links">remove some of your existing contacts.</a>', array(
'@limit' => $contacts_limit,
'@remove-contacts-link' => url('user/' . $requestor->uid . '/contacts', array(
'query' => array(
'qt-commons_trusted_contacts' => 'contacts',
),
'fragment' => 'qt-commons_trusted_contacts',
)),
)));
}
if ($requestee_memberships > $contacts_limit) {
$exceeds_limit = TRUE;
drupal_set_message(t('@requestee has exceeded the limit of @limit trusted contacts and cannot accept any more contacts at this time.', array(
'@requestee' => $requestee->name,
'@limit' => $contacts_limit,
)));
}
if ($exceeds_limit) {
if ($ajax == 'ajax') {
$commands = array();
$commands[] = ajax_command_append('#messages', theme('status_messages'));
$page = array(
'#type' => 'ajax',
'#commands' => $commands,
);
ajax_deliver($page);
}
else {
drupal_goto();
}
return FALSE;
}
}
return TRUE;
}
function commons_trusted_contacts_request_trust_access($account, $token) {
global $user;
return drupal_valid_token($token, 'request' . ':' . $account->uid . ':' . $user->uid) && user_is_logged_in();
}
function commons_trusted_contacts_un_trust_access($account, $token) {
global $user;
return drupal_valid_token($token, 'untrust' . ':' . $account->uid . ':' . $user->uid) && user_is_logged_in();
}
function commons_trusted_contacts_approve_trust_access(OgMembership $og_membership, $token) {
$wrapper = entity_metadata_wrapper('og_membership', $og_membership);
return $wrapper->field_membership_token
->value() == $token && user_is_logged_in();
}
function commons_trusted_contacts_ignore_trust_access(OgMembership $og_membership, $token) {
$wrapper = entity_metadata_wrapper('og_membership', $og_membership);
return $wrapper->field_membership_token
->value() == $token && user_is_logged_in();
}
function commons_group_is_trusted_contact($uid, $account = NULL) {
if (empty($account)) {
global $user;
$account = $user;
}
return og_is_member('user', $uid, 'user', $account, array(
OG_STATE_ACTIVE,
));
}
function commons_trusted_contacts_privatemsg_write_access($account) {
global $user;
if (user_access('administer group')) {
return TRUE;
}
$uid = isset($account->uid) ? $account->uid : $account;
return privatemsg_user_access('write privatemsg') && (commons_group_is_trusted_contact($uid) || variable_get('commons_trusted_contacts_global_messaging', FALSE));
}
function commons_trusted_contacts_form_privatemsg_new_alter(&$form, &$form_state) {
global $user;
$form['body']['#format'] = 'plain_text';
$form['actions']['cancel'] = array(
'#type' => 'link',
'#title' => t('Cancel'),
'#href' => 'user/' . $user->uid . '/contacts',
'#options' => array(
'query' => array(
'qt-commons_trusted_contacts' => 'messages',
),
),
);
}
function commons_trusted_contacts_form_privatemsg_delete_alter(&$form, &$form_state) {
global $user;
if ($form['delete_destination']['#value'] == 'messages') {
$form['delete_destination']['#value'] = 'user/' . $user->uid . '/contacts';
}
}
function commons_trusted_contacts_form_commons_bw_partial_node_form_alter(&$form, &$form_state) {
if (!empty($form_state['group_id'])) {
return;
}
if (!module_exists('og_access')) {
return;
}
commons_trusted_contacts_form_add_privacy_toggle($form, $form_state);
$form['#validate'][] = 'commons_trusted_contacts_partial_node_form_validate';
}
function commons_trusted_contacts_form_add_privacy_toggle(&$form, &$form_state) {
$is_group_content = FALSE;
if (!empty($form[OG_AUDIENCE_FIELD][LANGUAGE_NONE][0]['default']['#default_value']) || !empty($form[OG_AUDIENCE_FIELD][LANGUAGE_NONE][0]['admin']['#default_value'])) {
$is_group_content = TRUE;
}
$form['group_audience_type'] = array(
'#type' => 'radios',
'#title' => t('Post to'),
'#title_display' => 'invisible',
'#default_value' => $is_group_content ? 'custom' : 'private',
'#options' => array(
'custom' => t('Post to specific groups'),
'private' => t('Post privately to all trusted contacts'),
),
'#weight' => 70,
'#attributes' => array(
'class' => array(
'hideable-field',
),
),
'#access' => empty($form_state['hide_audience_toggle']),
'#attached' => array(
'js' => array(
drupal_get_path('module', 'commons_trusted_contacts') . '/scripts/commons-trusted-contacts.js',
),
),
);
}
function commons_trusted_contacts_form_node_form_alter(&$form, &$form_state) {
$group_content_entity_types = commons_groups_get_group_content_entity_types();
if (!isset($group_content_entity_types['node'][$form['#node']->type])) {
return;
}
if (empty($form['og_user_group_ref']) || !module_exists('og_access') || og_is_group_type('node', $form_state['node']->type)) {
return;
}
commons_trusted_contacts_form_add_privacy_toggle($form, $form_state);
$form['og_group_ref']['#weight'] = $form['group_audience_type']['#weight'] + 1;
if (empty($form[OG_AUDIENCE_FIELD])) {
$form['group_audience_type']['#options']['custom'] = t('Post site-wide');
}
}
function commons_trusted_contacts_partial_node_form_validate($form, $form_state) {
if ($form_state['values']['group_audience_type'] == 'custom' && empty($form_state['values'][OG_AUDIENCE_FIELD][LANGUAGE_NONE][0])) {
form_set_error(OG_AUDIENCE_FIELD, t('Please enter one more groups where this content will be posted.'));
return FALSE;
}
}
function commons_trusted_contacts_node_presave($node) {
if (!module_exists('og_access') || og_is_group('node', $node)) {
return;
}
$group_content_entity_types = commons_groups_get_group_content_entity_types();
if (!isset($group_content_entity_types['node'][$node->type])) {
return;
}
if (isset($node->form_state['values']['group_audience_type'])) {
$group_audience_type = $node->form_state['values']['group_audience_type'];
}
if (isset($node->group_audience_type)) {
$group_audience_type = $node->group_audience_type;
}
$wrapper = entity_metadata_wrapper('node', $node);
if (isset($group_audience_type) && $group_audience_type == 'private') {
$wrapper->og_user_group_ref
->set(array(
$node->uid,
));
$wrapper->group_content_access
->set(OG_CONTENT_ACCESS_PRIVATE);
$wrapper->{OG_AUDIENCE_FIELD}
->set(array());
}
else {
if (!empty($node->{OG_AUDIENCE_FIELD}[LANGUAGE_NONE])) {
$group_ids = array();
foreach ($node->{OG_AUDIENCE_FIELD}[LANGUAGE_NONE] as $group) {
$group_ids[] = $group['target_id'];
}
$wrapper->{OG_AUDIENCE_FIELD}
->set($group_ids);
$wrapper->og_user_group_ref
->set(array());
}
}
}
function commons_trusted_contacts_action_info() {
$actions = array();
$files = commons_trusted_contacts_operations_load_action_includes();
foreach ($files as $filename) {
$action_info_fn = 'commons_trusted_contacts_' . str_replace('.', '_', basename($filename, '.inc')) . '_info';
$action_info = call_user_func($action_info_fn);
if (is_array($action_info)) {
$actions += $action_info;
}
}
return $actions;
}
function commons_trusted_contacts_operations_load_action_includes() {
static $loaded = FALSE;
$path = drupal_get_path('module', 'commons_trusted_contacts') . '/includes/actions/';
$files = array(
'set_state_active.action.inc',
'set_state_blocked.action.inc',
'mark_as_read.action.inc',
);
if (!$loaded) {
foreach ($files as $file) {
include_once $path . $file;
}
$loaded = TRUE;
}
return $files;
}
function commons_trusted_contacts_messages_popup($form, &$form_state, $account) {
global $user;
module_load_include('inc', 'privatemsg', 'privatemsg.pages');
$form = privatemsg_new($form, $form_state, $account->uid, 'New private message from ' . $user->name);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Send'),
);
$wrapper = entity_metadata_wrapper('user', $account);
$picture_path = empty($account->picture) ? variable_get('user_picture_default') : $wrapper
->value()->picture->uri;
$form['user_picture'] = array(
'#theme' => 'image_style',
'#style_name' => '50x50_avatar',
'#path' => $picture_path,
'#prefix' => '<div class="user-picture">',
'#suffix' => '</div>',
'#weight' => -50,
);
$form['body']['#format'] = 'plain_text';
unset($form['token']);
$form['subject']['#type'] = 'hidden';
$form['recipient']['#type'] = 'hidden';
drupal_set_title(t('Direct Message @recipient', array(
'@recipient' => format_username($account),
)));
return $form;
}
function commons_trusted_contacts_get_pending_invitations($uid) {
$query = new EntityFieldQuery();
$return = $query
->entityCondition('entity_type', 'og_membership')
->propertyCondition('group_type', 'user')
->propertyCondition('entity_type', 'user')
->propertyCondition('gid', $uid)
->propertyCondition('etid', $uid, '!=')
->propertyCondition('state', OG_STATE_PENDING)
->propertyCondition('type', 'trusted_contacts')
->fieldCondition('field_my_request', 'value', 1)
->execute();
return !empty($return['og_membership']) ? $return['og_membership'] : array();
}
function commons_trusted_contacts_users_upgrade_batch_init() {
$query = new EntityFieldQuery();
$result = $query
->entityCondition('entity_type', 'user')
->propertyCondition('uid', 0, '<>')
->execute();
$uids = array_keys($result['user']);
$ignore_uids = og_get_all_group('user');
$uids = array_diff($uids, $ignore_uids);
$uids_chunks = array_chunk($uids, variable_get('commons_trusted_contacts_upgrade_batch_size', 200));
$operations = array();
foreach ($uids_chunks as $uids) {
$operations[] = array(
'commons_trusted_contacts_batch_worker',
array(
$uids,
),
);
}
$batch = array(
'title' => t('Upgrading users...'),
'operations' => array(),
'init_message' => t('Commencing'),
'progress_message' => t('Processed @current out of @total.'),
'error_message' => t('An error occurred during processing'),
'finished' => 'commons_trusted_contacts_batch_finished',
'operations' => $operations,
);
batch_set($batch);
batch_process('<front>');
}
function commons_trusted_contacts_batch_worker($uids, &$context) {
foreach ($uids as $uid) {
$wrapper = entity_metadata_wrapper('user', $uid);
$wrapper->{OG_GROUP_FIELD}
->set(TRUE);
$wrapper
->save();
$context['results']['processed']++;
}
}
function commons_trusted_contacts_batch_finished($success, $results, $operations) {
if ($success) {
$message = format_plural($results['processed'], t('One user processed.'), t('@count users processed.'));
}
else {
$message = t('Error encountered while upgrading users.');
}
drupal_set_message($message);
}