View source
<?php
define('CONTACT_SAVE_MESSAGE_STATE_UNREAD', 0);
define('CONTACT_SAVE_MESSAGE_STATE_READ', 1);
define('CONTACT_SAVE_MESSAGES_LIST_PATH', 'admin/structure/contact/messages');
require_once 'includes/contact_save.views.inc';
function contact_save_menu() {
$items['admin/structure/contact/settings'] = array(
'title' => 'Contact save settings',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'contact_save_settings',
),
'access arguments' => array(
'administer contact forms',
),
'type' => MENU_LOCAL_TASK,
'weight' => 1,
'file' => 'includes/contact_save.admin.inc',
);
$items['admin/structure/contact/message/%/delete'] = array(
'title' => 'Contact save settings',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'contact_save_message_delete_form',
4,
),
'access arguments' => array(
'administer contact forms',
),
'type' => MENU_CALLBACK,
'file' => 'includes/contact_save.admin.inc',
);
return $items;
}
function contact_save_cron() {
$live_time = variable_get('contact_save_live_time', 0);
if ($live_time) {
db_delete('contact_save')
->condition('created', REQUEST_TIME - $live_time, '<')
->execute();
}
}
function contact_save_mail_alter(&$message) {
if ($message['id'] == 'contact_page_mail') {
$body = $message['body'];
unset($body[0]);
$record = array(
'cid' => isset($message['params']['category']['cid']) ? $message['params']['category']['cid'] : 1,
'uid' => isset($message['params']['sender']) ? $message['params']['sender']->uid : 0,
'name' => $message['params']['name'],
'mail' => $message['params']['mail'],
'subject' => $message['params']['subject'],
'message' => implode("\n", $body),
'created' => REQUEST_TIME,
);
drupal_write_record('contact_save', $record);
module_invoke_all('contact_save_message_insert', $record['id']);
}
}
function contact_save_views_api() {
return array(
'api' => 3,
'path' => drupal_get_path('module', 'contact_save') . '/includes',
);
}
function contact_save_message_delete($id) {
$query = db_delete('contact_save')
->condition('id', $id, '=');
$result = $query
->execute();
return $result;
}
function contact_save_views_post_render(&$view, &$output, &$cache) {
if ($view->name == 'contact_messages' && $view->current_display == 'message') {
$message_id = $view->args[0];
module_invoke_all('contact_save_message_read', $message_id);
}
}
function contact_save_contact_save_message_read($message_id) {
$status = contact_save_message_read_status($message_id);
$result = db_update('contact_save')
->fields(array(
'`read`' => REQUEST_TIME,
))
->condition('id', $message_id, '=')
->execute();
if ($status == CONTACT_SAVE_MESSAGE_STATE_UNREAD) {
module_invoke_all('contact_save_message_first_read', $message_id);
}
}
function contact_save_message_read_status($message_id) {
$query = db_select('contact_save', 'cs');
$query
->condition('cs.id', $message_id);
$query
->addField('cs', 'read', 'read_status');
$read = $query
->execute()
->fetchField();
if ($read > 0) {
return CONTACT_SAVE_MESSAGE_STATE_READ;
}
return CONTACT_SAVE_MESSAGE_STATE_UNREAD;
}
function contact_save_unread_messages() {
return db_select('contact_save', 'cs')
->condition('cs.read', 0)
->countQuery()
->execute()
->fetchField();
}
function contact_save_user_login(&$edit, $account) {
if (user_access('administer contact forms', $account)) {
if (variable_get('contact_save_unread_message_status_at_login', TRUE)) {
$unread_messages = contact_save_unread_messages();
if ($unread_messages > 0) {
drupal_set_message(t('There are <a href="@url">@number unread contact form
messages</a>.', array(
'@url' => url(CONTACT_SAVE_MESSAGES_LIST_PATH),
'@number' => $unread_messages,
)));
}
}
}
}
function contact_save_user_view($account, $view_mode, $langcode) {
if (user_access('administer contact forms', $account)) {
if (variable_get('contact_save_unread_message_status_on_profile', FALSE)) {
$unread_messages = contact_save_unread_messages();
if ($unread_messages > 0) {
$account->content['contact_save'] = array(
'#type' => 'user_profile_category',
'#title' => 'Contact form messages',
'messages' => array(
'#type' => 'user_profile_item',
'#title' => '',
'#markup' => t('There are !url.', array(
'!url' => l(format_plural($unread_messages, 'unread contact form message', 'unread contact form messages'), CONTACT_SAVE_MESSAGES_LIST_PATH),
)),
),
);
}
}
}
}
function contact_save_field_extra_fields() {
$fields['user']['user'] = array(
'display' => array(
'contact_save' => array(
'label' => t('Site contact form messages'),
'description' => t('Saved site contact form messages view element.'),
'weight' => 10,
),
),
);
return $fields;
}