og.pages.inc in Organic groups 6.2
Page callbacks for Organic groups.
File
og.pages.incView source
<?php
/**
* @file
* Page callbacks for Organic groups.
*/
/**
* Admins may broadcast messages to all their members.
*
* @ingroup forms
* @param $node
* The group node.
*/
function og_broadcast_form($form_state, $node) {
drupal_set_title(t('Send message to %group', array(
'%group' => $node->title,
)));
if (!empty($form_state['post'])) {
drupal_set_message(t('Your message will be sent to all members of this group.'));
}
$form['subject'] = array(
'#type' => 'textfield',
'#title' => t('Subject'),
'#size' => 70,
'#maxlength' => 250,
'#description' => t('Enter a subject for your message.'),
'#required' => TRUE,
);
$form['body'] = array(
'#type' => 'textarea',
'#title' => t('Body'),
'#rows' => 5,
'#cols' => 90,
'#description' => t('Enter a body for your message.'),
'#required' => TRUE,
);
$form['send'] = array(
'#type' => 'submit',
'#value' => t('Send message'),
);
$form['gid'] = array(
'#type' => 'value',
'#value' => $node->nid,
);
return $form;
}
function og_broadcast_form_submit($form, &$form_state) {
global $user;
$sql = og_list_users_sql(1);
$result = db_query($sql, $form_state['values']['gid']);
$recipients = array();
while ($row = db_fetch_object($result)) {
$recipients[] = $row->uid;
}
$node = node_load($form_state['values']['gid']);
$variables = array(
'@group' => $node->title,
'@subject' => $form_state['values']['subject'],
'@body' => $form_state['values']['body'],
'@site' => variable_get('site_name', 'drupal'),
'!url_group' => url("node/{$node->nid}", array(
'absolute' => TRUE,
)),
'!url_unsubscribe' => url("og/unsubscribe/{$node->nid}/{$user->uid}", array(
'absolute' => TRUE,
)),
);
$message = array(
'from' => $user,
'subject' => $form_state['values']['subject'],
'body' => _og_mail_text('og_admin_email_body', $variables),
);
// Send notifications to each member; Sending an array of recipients implies
// that this is a bulk message.
module_invoke_all('og', 'user broadcast', $node->nid, $recipients, $message);
drupal_set_message(format_plural(count($recipients), '1 message queued for delivery.', '@count messages queued for delivery.'));
}
function og_manage($group_node) {
global $user;
$bc = og_get_breadcrumb($group_node);
drupal_set_breadcrumb($bc);
return drupal_get_form('og_manage_form', $group_node);
}
function og_manage_form($form_state, $group) {
global $user;
// avoid double messages on form submit
if (!$form_state['post']) {
// group manager can't leave
if ($group->og_selective == OG_CLOSED) {
drupal_set_message(t('You may not leave this group because it is a <em>closed</em> group. You should request removal from a group administrator.'));
}
elseif ($group->uid == $user->uid) {
drupal_set_message(t('You may not leave this group because you are its owner. A site administrator can assign ownership to another user and then you may leave.'));
}
else {
$links[] = l(t('Leave this group'), "og/unsubscribe/{$group->nid}/{$user->uid}");
$form['unsubscribe'] = array(
'#value' => theme('item_list', $links),
);
}
}
$form['gid'] = array(
'#type' => 'value',
'#value' => $group->nid,
);
return $form;
}
function og_manage_form_submit($form, &$form_state) {
global $user;
$passed_values = $form_state['values'];
unset($passed_values['gid'], $passed_values['op'], $passed_values['form_id'], $passed_values['form_build_id'], $passed_values['form_token']);
og_save_subscription($form_state['values']['gid'], $user->uid, $passed_values);
drupal_set_message(t('Membership saved.'));
}
/**
* OG create admin form
*/
function og_create_admin_confirm($form_state, $node, $account) {
$form['node'] = array(
'#type' => 'value',
'#value' => $node,
);
$form['account'] = array(
'#type' => 'value',
'#value' => $account,
);
// Set the cancel destination, checking for an existing destination in the URL.
$destination = isset($_GET['destination']) ? urldecode($_GET['destination']) : "og/users/{$node->nid}";
return confirm_form($form, t('Are you sure you want to make !name a group administrator for the group %title?', array(
'!name' => theme('username', $account),
'%title' => $node->title,
)), $destination, ' ', t('Confirm'), t('Cancel'));
}
/**
* Confirm og create admin form
*/
function og_create_admin_confirm_submit($form, &$form_state) {
$account = $form_state['values']['account'];
$node = $form_state['values']['node'];
og_save_subscription($node->nid, $account->uid, array(
'is_admin' => 1,
));
drupal_set_message(t('%name was promoted to <em>group administrator</em>.', array(
'%name' => $account->name,
)));
$variables = array(
'@group' => $node->title,
'!group_url' => url("node/{$node->nid}", array(
'absolute' => TRUE,
)),
'@username' => strip_tags(theme('username', $account)),
);
$message = array(
'subject' => _og_mail_text('og_new_admin_subject', $variables),
'body' => _og_mail_text('og_new_admin_body', $variables),
);
module_invoke_all('og', 'admin new', $node->nid, $account->uid, $message);
$form_state['#redirect'] = "og/users/{$node->nid}";
}
/**
* OG remove admin form
*/
function og_remove_admin_confirm($form_state, $node, $account) {
$form['gid'] = array(
'#type' => 'value',
'#value' => $node->nid,
);
$form['account'] = array(
'#type' => 'value',
'#value' => $account,
);
// Set the cancel destination, checking for an existing destination in the URL.
$destination = isset($_GET['destination']) ? urldecode($_GET['destination']) : "og/users/{$node->nid}";
return confirm_form($form, t('Are you sure you want to remove !name as a group administrator for the group %title?', array(
'!name' => theme('username', $account),
'%title' => $node->title,
)), $destination, ' ', t('Remove'), t('Cancel'));
}
/**
* Confirm og remove admin form
*/
function og_remove_admin_confirm_submit($form, &$form_state) {
$account = $form_state['values']['account'];
$gid = $form_state['values']['gid'];
og_save_subscription($gid, $account->uid, array(
'is_admin' => 0,
));
drupal_set_message(t('%name is no longer a <em>group administrator</em>.', array(
'%name' => $account->name,
)));
$message = array(
'subject' => _og_mail_text('og_remove_admin_subject', $variables),
'body' => _og_mail_text('og_remove_admin_body', $variables),
);
module_invoke_all('og', 'admin remove', $gid, $account->uid, array());
$form_state['redirect'] = "og/users/{$gid}";
}
function og_invite_form($form_state, $node) {
$bc = og_get_breadcrumb($node);
drupal_set_breadcrumb($bc);
$max = variable_get('og_email_max', 10);
$form['mails'] = array(
'#type' => 'textarea',
'#title' => t('Email addresses or usernames'),
'#description' => t('Enter up to %max email addresses or usernames. Separate multiple addresses by commas or new lines. Each person will receive an invitation message from you.', array(
'%max' => $max,
)),
);
$form['pmessage'] = array(
'#type' => 'textarea',
'#title' => t('Personal message'),
'#description' => t('Optional. Enter a message which will become part of the invitation email.'),
);
$form['op'] = array(
'#type' => 'submit',
'#value' => t('Send invitation'),
);
$form['gid'] = array(
'#type' => 'value',
'#value' => $node->nid,
);
return $form;
}
// TODOL Use #element_validate as per http://drupal.org/node/144132#element-validate
function og_invite_form_validate($form, &$form_state) {
global $user;
$max = variable_get('og_email_max', 10);
$mails = $form_state['values']['mails'];
$mails = str_replace("\n", ',', $mails);
$emails = explode(',', $mails);
if (count($emails) > $max) {
form_set_error('mails', t('You may not specify more than %max email addresses or usernames.', array(
'%max' => $max,
)));
}
elseif (in_array($user->mail, $emails)) {
form_set_error('mails', t('You may not invite yourself - @self.', array(
'@self' => $user->mail,
)));
}
else {
$valid_emails = array();
$bad = array();
foreach ($emails as $email) {
$email = trim($email);
if (empty($email)) {
continue;
}
if (valid_email_address($email)) {
$valid_emails[] = $email;
}
else {
$account = user_load(array(
'name' => check_plain($email),
));
if ($account->mail) {
$valid_emails[] = $account->mail;
}
else {
$bad[] = $email;
}
}
}
if (count($bad)) {
form_set_error('mails', t('Invalid email address or username: @value.', array(
'@value' => implode(', ', $bad),
)));
}
else {
// Store valid e-mails so we don't have to go through that looping again on submit
$form_state['valid_emails'] = $valid_emails;
}
}
}
function og_invite_form_submit($form, &$form_state) {
$emails = $form_state['valid_emails'];
$node = node_load($form_state['values']['gid']);
$variables = array(
'@group' => $node->title,
'@description' => $node->og_description,
'@site' => variable_get('site_name', 'drupal'),
'!group_url' => url("og/subscribe/{$node->nid}", array(
'absolute' => TRUE,
)),
'@body' => $form_state['values']['pmessage'],
);
global $user;
$from = $user->mail;
foreach ($emails as $mail) {
drupal_mail('og', 'invite_user', $mail, $GLOBALS['language'], $variables, $from);
}
drupal_set_message(format_plural(count($emails), '1 invitation sent.', '@count invitations sent.'));
}
function og_subscribe($node, $uid = NULL) {
global $user;
if (is_null($uid)) {
if ($user->uid) {
$account = drupal_clone($user);
}
else {
$dest = drupal_get_destination();
if (variable_get('user_register', 1) == 0) {
drupal_set_message(t('In order to join this group, you must <a href="!login">login</a>. After you have successfully done so, you will need to request membership again.', array(
'!login' => url("user/login", array(
'query' => $dest,
)),
)));
}
else {
drupal_set_message(t('In order to join this group, you must <a href="!login">login</a> or <a href="!register">register</a> a new account. After you have successfully done so, you will need to request membership again.', array(
'!register' => url("user/register", array(
'query' => $dest,
)),
'!login' => url("user/login", array(
'query' => $dest,
)),
)));
}
drupal_goto('user', $dest);
}
}
else {
$account = user_load(array(
'uid' => $uid,
));
}
if ($node->og_selective >= OG_INVITE_ONLY || $node->status == 0 || !og_is_group_type($node->type)) {
drupal_access_denied();
exit;
}
// Only admins can add another member.
if ($account->uid != $user->uid && !og_is_group_admin($node)) {
drupal_access_denied();
exit;
}
else {
if (isset($account->og_groups[$node->nid])) {
drupal_set_message(t('@user is already a member of the group @group.', array(
'@user' => $account->name,
'@group' => $node->title,
)));
drupal_goto('node/' . $node->nid);
}
else {
return drupal_get_form('og_confirm_subscribe', $node->nid, $node, $account);
}
}
}
/**
* Confirm og membership form
*/
function og_confirm_subscribe($form_state, $gid, $node, $account) {
$form['gid'] = array(
'#type' => 'value',
'#value' => $gid,
);
$form['account'] = array(
'#type' => 'value',
'#value' => $account,
);
if ($node->og_selective == OG_MODERATED) {
$form['request'] = array(
'#type' => 'textarea',
'#title' => t('Additional details'),
'#description' => t('Add any detail which will help an administrator decide whether to approve or deny your membership request.'),
);
$submit_label = t('Request membership');
}
else {
$form['request'] = array(
'#type' => 'value',
'#value' => '',
);
$submit_label = t('Join');
}
// Set the cancel destination, checking for an existing destination in the URL.
$destination = isset($_GET['destination']) ? urldecode($_GET['destination']) : 'node/' . $node->nid;
return confirm_form($form, t('Are you sure you want to join the group %title?', array(
'%title' => $node->title,
)), $destination, ' ', $submit_label, t('Cancel'));
}
/**
* Confirm og membership submit handler
*/
function og_confirm_subscribe_submit($form, &$form_state) {
$return = og_subscribe_user($form_state['values']['gid'], $form_state['values']['account'], $form_state['values']['request']);
if (!empty($return['message'])) {
drupal_set_message($return['message']);
}
$form_state['redirect'] = 'node/' . $form_state['values']['gid'];
}
/**
* Confirm og unsubscription form
*/
function og_confirm_unsubscribe($form_state, $group_node, $account) {
global $user;
$form['group_node'] = array(
'#type' => 'value',
'#value' => $group_node,
);
$form['account'] = array(
'#type' => 'value',
'#value' => $account,
);
if ($account->uid == $user->uid) {
$message = t('Are you sure you want to leave the group %title?', array(
'%title' => $group_node->title,
));
$confirm_text = t("Leave");
}
else {
$message = t('Are you sure you want to remove !name from the group %title?', array(
'!name' => theme('username', $account),
'%title' => $group_node->title,
));
$confirm_text = t("Remove");
}
// Set the cancel destination, checking for an existing destination in the URL.
$destination = isset($_GET['destination']) ? urldecode($_GET['destination']) : 'og/users/' . $group_node->nid;
return confirm_form($form, $message, $destination, ' ', $confirm_text, t('Cancel'));
}
/**
* Confirm og unsubscription submit handler
*/
function og_confirm_unsubscribe_submit($form, &$form_state) {
global $user;
$group_node = $form_state['values']['group_node'];
$account = $form_state['values']['account'];
og_delete_subscription($group_node->nid, $account->uid);
// If needed, reload user object to reflect unsubscribed group.
if ($user->uid == $account->uid) {
og_get_subscriptions($account->uid, 1, TRUE);
// Clear cache.
$user = user_load(array(
'uid' => $user->uid,
));
$message = t('You left the group %group.', array(
'%group' => $group_node->title,
));
}
else {
$message = t('%user removed from %group.', array(
'%user' => $account->name,
'%group' => $group_node->title,
));
}
drupal_set_message($message);
// Determine where to go next. GHP if accessible, or else site front page.
$form_state['redirect'] = node_access('view', $group_node) ? "node/" . $group_node->nid : '';
}
function og_add_users($form_state, $group_node) {
$form['og_names'] = array(
'#type' => 'textarea',
'#title' => t('List of users'),
'#rows' => 5,
'#cols' => 70,
// No autocomplete b/c user_autocomplete can't handle commas like taxonomy. pls improve core.
// '#autocomplete_path' => 'user/autocomplete',
'#description' => t('Add one or more usernames in order to associate users with this group. Separate multiple usernames by commas or new lines.'),
'#required' => TRUE,
);
$form['op'] = array(
'#type' => 'submit',
'#value' => t('Add users'),
);
$form['gid'] = array(
'#type' => 'value',
'#value' => $group_node->nid,
);
return $form;
}
/**
* VAlidate hanler for the add users form.
*/
function og_add_users_validate($form, $form_state) {
$names = preg_split('/[\\r\\n,]+/', $form_state['values']['og_names']);
foreach ($names as $name) {
$account = user_load(array(
'name' => trim($name),
));
if (isset($account->uid)) {
$accounts[] = $account;
$uids[] = $account->uid;
}
else {
$bad[] = check_plain($name);
$err = TRUE;
}
}
if (isset($err)) {
form_set_error('og_names', format_plural(count($bad), 'Unrecognized name: %bad.', 'Unrecognized names: %bad.', array(
'%bad' => implode(', ', $bad),
)));
}
}
function og_add_users_submit($form, &$form_state) {
// Safest option is to do a select, filter existing members, then insert.
$names = preg_split('/[\\r\\n,]+/', $form_state['values']['og_names']);
foreach ($names as $name) {
$account = user_load(array(
'name' => trim($name),
));
if ($account->uid) {
$accounts[] = $account;
}
}
foreach ($accounts as $account) {
og_save_subscription($form_state['values']['gid'], $account->uid, array(
'is_active' => 1,
));
}
drupal_set_message(format_plural(count($accounts), '1 user added to the group.', '@count users added to the group.'));
}
function og_page_activity() {
$sql = "SELECT oga.group_nid, node_group_nid.title, node_group_nid.uid, u.name, COUNT(*) as ncount, MAX(n.created) as ncreated, SUM(ncs.comment_count) as ccount, MAX(last_comment_timestamp) AS lct FROM {node} n INNER JOIN {og_ancestry} oga ON n.nid = oga.nid LEFT JOIN {node_comment_statistics} ncs ON n.nid = ncs.nid INNER JOIN {node} node_group_nid ON oga.group_nid = node_group_nid.nid INNER JOIN {users} u ON node_group_nid.uid = u.uid WHERE n.status = 1 GROUP BY oga.group_nid, node_group_nid.title, node_group_nid.uid, u.name";
$header = array(
array(
'data' => t('Title'),
'field' => 'node_group_nid.title',
),
array(
'data' => t('Manager'),
'field' => 'u.name',
),
array(
'data' => t('Posts'),
'field' => 'ncount',
),
array(
'data' => t('Comments'),
'field' => 'ccount',
),
array(
'data' => t('Age'),
'field' => 'ncreated',
),
array(
'data' => t('Last comment'),
'field' => 'lct',
'sort' => 'asc',
),
);
$result = db_query($sql . tablesort_sql($header));
while ($row = db_fetch_object($result)) {
$rows[] = array(
l($row->title, "node/{$row->group_nid}"),
theme('username', $row),
$row->ncount,
$row->ccount,
format_interval(time() - $row->ncreated),
format_interval(time() - $row->lct),
);
}
if (!isset($rows)) {
$rows[] = array(
array(
'data' => t('No groups available.'),
'colspan' => 6,
),
);
}
return theme('table', $header, $rows);
}
Functions
Name![]() |
Description |
---|---|
og_add_users | |
og_add_users_submit | |
og_add_users_validate | VAlidate hanler for the add users form. |
og_broadcast_form | Admins may broadcast messages to all their members. |
og_broadcast_form_submit | |
og_confirm_subscribe | Confirm og membership form |
og_confirm_subscribe_submit | Confirm og membership submit handler |
og_confirm_unsubscribe | Confirm og unsubscription form |
og_confirm_unsubscribe_submit | Confirm og unsubscription submit handler |
og_create_admin_confirm | OG create admin form |
og_create_admin_confirm_submit | Confirm og create admin form |
og_invite_form | |
og_invite_form_submit | |
og_invite_form_validate | |
og_manage | |
og_manage_form | |
og_manage_form_submit | |
og_page_activity | |
og_remove_admin_confirm | OG remove admin form |
og_remove_admin_confirm_submit | Confirm og remove admin form |
og_subscribe |