'admin/settings/guestbook', 'title' => t('Guestbook'), 'callback' => 'drupal_get_form', 'callback arguments' => array('guestbook_admin_settings'), 'access' => user_access('administer site configuration')); if ($guestbook_mode & GUESTBOOK_USER_GUESTBOOKS) { $items[] = array( 'path' => 'guestbook', 'title' => t('Guestbooks'), 'access' => user_access('access site guestbook') || user_access('access user guestbooks'), 'callback' => 'guestbook_list'); } else { $items[] = array( 'path' => 'guestbook', 'title' => variable_get('guestbook_site_title', t('Site guestbook')), 'access' => user_access('access site guestbook'), 'callback' => 'guestbook_page'); } } else { if ($guestbook_mode & GUESTBOOK_USER_GUESTBOOKS) { if ($user->uid > 0 && _guestbook_exists($user->uid)) { $unread = _guestbook_newentries(); $unread = $unread ? ' (' . $unread . ')' : ""; $items[] = array( 'path' => 'guestbook/' . $user->uid, 'title' => t('My guestbook') . $unread, 'type' => MENU_DYNAMIC_ITEM); } } if (arg(0) == 'guestbook' && is_numeric(arg(1))) { $uid = arg(1); $title = _guestbook_info($uid, 'title'); if ($guestbook_mode & GUESTBOOK_USER_GUESTBOOKS) { $items[] = array( 'path' => 'guestbook/'. $uid, 'title' => $title, 'access' => $uid == 0 ? user_access('access site guestbook') : user_access('access user guestbooks'), 'type' => MENU_CALLBACK, 'callback' => 'guestbook_page', 'callback arguments' => array($uid)); } $items[] = array( 'path' => 'guestbook/'. $uid .'/form', 'title' => t('Add guestbook entry'), 'access' => $uid == 0 ? user_access('post in site guestbook') : user_access('post in user guestbooks'), 'type' => MENU_CALLBACK, 'callback' => 'guestbook_page_form', 'callback arguments' => array($uid)); } } return $items; } /** * Implementation of hook_user() */ function guestbook_user($op, &$edit, &$user, $category = '') { $guestbook_mode = variable_get('guestbook_mode', GUESTBOOK_SITE_GUESTBOOK | GUESTBOOK_USER_GUESTBOOKS); if ($guestbook_mode & GUESTBOOK_USER_GUESTBOOKS) { switch ($op) { case 'view': if (user_access('access user guestbooks') && $user->guestbook_status == 0) { $title = t("Read @username's guestbook.", array('@username' => $user->name)); $link = l(t('View recent guestbook entries'), "guestbook/$user->uid", array('title' => $title)); $items[] = array( 'title' => t('Guestbook'), 'value' => $link, 'class' => 'guestbook'); return array(t('History') => $items); } break; case 'form': if ($category == 'account') { $form['guestbook'] = array( '#type' => 'fieldset', '#title' => t('User guestbook')); $form['guestbook']['guestbook_status'] = array( '#type' => 'radios', '#title' => t('Status'), '#default_value' => $edit['guestbook_status'], '#options' => array(t('Enabled'), t('Disabled'))); $form['guestbook']['guestbook_intro'] = array( '#type' => 'textarea', '#title' => t('Intro text'), '#default_value' => $edit['guestbook_intro'], '#cols' => 70, '#rows' => GUESTBOOK_TEXTAREA_ROWS, '#description' => t('The text that appears on top of your guestbook.')); $form['guestbook']['guestbook_send_email'] = array( '#type' => 'textfield', '#title' => t('Send an notification to the following e-mail address about new guestbook entries'), '#description' => t("Leave blank if you don't wish to be notified"), '#size' => 30, '#maxlength' => 128, '#default_value' => $edit['guestbook_send_email']); return $form; } } } } /** * Implementation of hook_perm() */ function guestbook_perm() { return array( 'access site guestbook', 'access user guestbooks', 'post in site guestbook', 'post in user guestbooks', 'administer all guestbooks'); } /** * Implementation of hook_help() */ function guestbook_help($section) { switch ($section) { case 'admin/modules#description': return t('Adds a site guestbook and individual user guestbooks.'); } } /** * Implementation of hook_settings() */ function guestbook_admin_settings() { // Mode $form['guestbook_mode'] = array( '#type' => 'radios', '#title' => t('Mode'), '#default_value' => variable_get('guestbook_mode', GUESTBOOK_SITE_GUESTBOOK | GUESTBOOK_USER_GUESTBOOKS), '#options' => array( GUESTBOOK_SITE_GUESTBOOK | GUESTBOOK_USER_GUESTBOOKS => t('Site and user guestbooks'), GUESTBOOK_SITE_GUESTBOOK => t('Site guestbook only'), GUESTBOOK_USER_GUESTBOOKS => t('User guestbooks only'))); // Site guestbook $form['site_guestbook'] = array( '#type' => 'fieldset', '#title' => t('Site guestbook')); $form['site_guestbook']['guestbook_site_title'] = array( '#type' => 'textfield', '#title' => t('Title'), '#default_value' => variable_get('guestbook_site_title', 'Site guestbook'), '#size' => 30, '#maxlength' => 128, '#description' => t("The site guestbook's page title.")); $form['site_guestbook']['guestbook_site_intro'] = array( '#type' => 'textarea', '#title' => t('Intro text'), '#default_value' => variable_get('guestbook_site_intro', ''), '#cols' => 70, '#rows' => GUESTBOOK_TEXTAREA_ROWS, '#description' => t('The text that appears on top of the site guestbook.')); $form['site_guestbook']['guestbook_send_email'] = array( '#type' => 'textfield', '#title' => t('Send an notification to the following e-mail address about new guestbook entries'), '#description' => t("Leave blank if you don't wish to be notified"), '#size' => 30, '#maxlength' => 128, '#default_value' => variable_get('guestbook_send_email', '') ); // User guestbooks $form['user_guestbooks'] = array( '#type' => 'fieldset', '#title' => t('User guestbooks'), '#description' => t('Users can individually disable their guestbook or add an intro text on the user account page.')); // Display options $form['display_options'] = array( '#type' => 'fieldset', '#title' => t('Display options')); $form['display_options']['guestbook_entries_per_page'] = array( '#type' => 'textfield', '#title' => t('Entries per page'), '#default_value' => variable_get('guestbook_entries_per_page', 20), '#size' => 3, '#maxlength' => 3, '#description' => t('The number of guestbook entries per page.')); $displayoptions = variable_get('guestbook_display', array('date', 'email','website','comments','userip')); $form['display_options']['guestbook_display'] = array( '#type' => 'checkboxes', '#title' => t('Toggle display'), '#default_value' => $displayoptions, '#options' => array( 'date' => t('Submission date'), 'email' => t('Anonymous poster e-mail'), 'website' => t('Anonymous poster website'), 'comments' => t('Comments'), 'userip' => t('User IP')) ); $form['display_options']['guestbook_ip_view'] = array( '#type' => 'radios', '#title' => t('User IP show only admins or all'), '#default_value' => variable_get('guestbook_ip_view', GUESTBOOK_IP_VIEW_ADMIN), '#disabled' => !in_array('userip', $displayoptions), '#options' => array( GUESTBOOK_IP_VIEW_ALL => t('view all'), GUESTBOOK_IP_VIEW_ADMIN => t('view only administrator')), '#description' => t('Visible IP info for all or only admins.') ); $form['display_options']['guestbook_info_style'] = array( '#type' => 'radios', '#title' => t('Display info style'), '#default_value' => variable_get('guestbook_info_style', GUESTBOOK_INFO_STYLE_TEXT), '#options' => array( GUESTBOOK_INFO_STYLE_TEXT => t('text style'), GUESTBOOK_INFO_STYLE_ICON => t('icon style')), '#description' => t('Visible info style in comment top: Simple text or picture.') ); $form['display_options']['guestbook_icon_path'] = array( '#type' => 'textfield', '#title' => t('Real, exist path, where stored the icons'), '#description' => t("If not use default path, copy the pictures to new directory!"), '#size' => 30, '#maxlength' => 128, '#default_value' => variable_get('guestbook_icon_path', drupal_get_path( 'module', 'guestbook'))); $form['display_options']['guestbook_pager_position'] = array( '#type' => 'radios', '#title' => t('Position of pager'), '#default_value' => variable_get('guestbook_pager_position', GUESTBOOK_PAGER_BELOW), '#options' => array( GUESTBOOK_PAGER_ABOVE => t('Above the entries'), GUESTBOOK_PAGER_BELOW => t('Below the entries'), GUESTBOOK_PAGER_ABOVE | GUESTBOOK_PAGER_BELOW => t('Above and below the entries'))); // Posting settings $form['posting_settings'] = array( '#type' => 'fieldset', '#title' => t('Posting settings')); $form['posting_settings']['guestbook_input_format'] = filter_form(variable_get('guestbook_input_format', 0), NULL, array('guestbook_input_format')); $form['posting_settings']['guestbook_input_format']['#type'] = 'item'; $form['posting_settings']['guestbook_filter_tips'] = array( '#type' => 'checkbox', '#title' => t('Display filter tips'), '#default_value' => variable_get('guestbook_filter_tips', TRUE), '#description' => t('If enabled filter tips are displayed below the message textarea.')); $form['posting_settings']['guestbook_anonymous_fields'] = array( '#type' => 'checkboxes', '#title' => t('Anonymous poster fields'), '#default_value' => variable_get('guestbook_anonymous_fields', array('email','website')), '#description' => t('Additional information that anonymous posters may supply.'), '#options' => array( 'email' => 'E-mail', 'website' => 'Website')); $form['posting_settings']['guestbook_form_location'] = array( '#type' => 'radios', '#title' => t('Location of entry submission form'), '#default_value' => variable_get('guestbook_form_location', 'above'), '#options' => array( 'above' => t('Above entries'), 'below' => t('Below entries'), 'separate page' => t('Separate page'))); $form['array_filter'] = array('#type' => 'value', '#value' => TRUE); return system_settings_form($form); } /** * Shows a user or site guestbook * (menu callback) */ function guestbook_page($uid = 0, $op = NULL, $op_id = NULL) { global $user; if (!_guestbook_exists($uid)) { drupal_not_found(); return; } // Set last visited time for own guestbook if ($uid > 0 && $user->uid == $uid) { user_save($user, array('guestbook_visited' => time())); } // Delete or comment an entry if (_guestbook_access('administer', $uid) && is_numeric($op_id)) { switch ($op) { case 'delete': return guestbook_delete_entry_confirm_page($uid, $op_id); case 'comment': $comment_entry = $op_id; break; } } // Fetch guestbook entries $limit = variable_get('guestbook_entries_per_page', 20); $result = pager_query( "SELECT g.*, u1.name, u1.data, u1.picture, u2.name as commentby FROM {guestbook} g LEFT JOIN {users} u1 ON g.author = u1.uid LEFT JOIN {users} u2 ON g.commentauthor = u2.uid WHERE g.recipient = %d ORDER BY g.created DESC", $limit, 0, "SELECT COUNT(*) FROM {guestbook} WHERE recipient = %d", $uid); $entries = array(); while ($entry = db_fetch_array($result)) { $entries[] = $entry; } return theme('guestbook', $uid, $entries, $comment_entry, $limit); } /** * Display the guestbook form on a separate page * (menu callback) */ function guestbook_page_form($uid) { if (!_guestbook_exists($uid)) { drupal_not_found(); return; } return guestbook_form_entry($uid, 'page'); } /** * List all guestbooks * (menu callback) */ function guestbook_list() { $limit = 40; $guestbooks = array(); $guestbook_mode = variable_get('guestbook_mode', GUESTBOOK_SITE_GUESTBOOK | GUESTBOOK_USER_GUESTBOOKS); $header = array( array('data' => t('user'), 'field' => 'u.name'), array('data' => t('entries'), 'field' => 'num'), array('data' => t('last update'), 'field' => 'created', 'sort' => 'desc')); $result = pager_query( "SELECT u.uid, u.name, u.data, MAX(g.created) as created, COUNT(g.recipient) as num FROM {users} u LEFT OUTER JOIN {guestbook} g ON u.uid = g.recipient GROUP BY u.uid, u.name, u.data, g.recipient". tablesort_sql($header), $limit, 0, "SELECT COUNT(*) FROM {users}"); while ($guestbook = db_fetch_array($result)) { if ($guestbook['uid'] == 0 && user_access('access site guestbook') && $guestbook_mode & GUESTBOOK_SITE_GUESTBOOK) { // site guestbook $guestbooks[0] = $guestbook; } else if ($guestbook['uid'] > 0 && user_access('access user guestbooks')) { // user guestbooks $data = unserialize($guestbook['data']); if ($data['guestbook_status'] == 0) { $guestbooks[$guestbook['uid']] = $guestbook; } } } return theme('guestbook_list', $guestbooks, $header, $limit); } /** * Guestbook form functions */ function guestbook_form_entry($uid, $display = '') { $output = drupal_get_form('guestbook_form_entry_form', $uid, $display); return $output; } function guestbook_form_entry_form($uid, $display = '') { global $user; $form = array(); if ($user->uid == 0 ) { // fields for anonymous poster $form['anonname'] = array( '#type' => 'textfield', '#title' => t('Name'), '#size' => 32, '#maxlength' => 64, '#required' => TRUE); $anonymous_fields = (array) variable_get('guestbook_anonymous_fields', array('email','website')); if (in_array('email', $anonymous_fields)) { $form['anonemail'] = array( '#type' => 'textfield', '#title' => t('E-mail'), '#size' => 32, '#maxlength' => 128); } if (in_array('website', $anonymous_fields)) { $form['anonwebsite'] = array( '#type' => 'textfield', '#title' => t('Homepage'), '#size' => 32, '#maxlength' => 128); } } $filter_tips = variable_get('guestbook_filter_tips', TRUE) ? _guestbook_form_filter_tips() : NULL; $form['message'] = array( '#type' => 'textarea', '#title' => t('Message'), '#cols' => 32, '#rows' => GUESTBOOK_TEXTAREA_ROWS, '#description' => $filter_tips, '#required' => TRUE); $form['send'] = array( '#type' => 'submit', '#value' => t('Send')); $form['uid'] = array( '#type' => 'value', '#value' => $uid); $form['access'] = array( '#type' => 'value', '#value' => _guestbook_access('post', $uid)); $form['display'] = array( '#type' => 'value', '#value' => $display); return $form; } function guestbook_form_entry_form_submit($form_id, $edit) { global $user; $myrealip = realip(); $uid = $edit['uid']; $message = $edit['message']; // Make sure this isn't a dupe $result = db_query("SELECT message FROM {guestbook} WHERE recipient = %d ORDER BY id DESC LIMIT 1", $uid); $entry = db_fetch_array($result); if ($entry['message'] == $message) { return; } // no empty entries if ($message == '') { return; } if (module_exists('spam')) { // Is this spam? $spamcheck = $edit['anonname'] . ' ' . $edit['anonemail'] . ' '. $edit['anonwebsite']; if (spam_content_filter('guestbook', 1, $spamcheck, $message, '_guestbook_spam')) { return; } } // E-mail notification $iSendEMail = ''; $guestbook_mode = variable_get('guestbook_mode', GUESTBOOK_SITE_GUESTBOOK | GUESTBOOK_USER_GUESTBOOKS); if ($uid == 0 && ($guestbook_mode & GUESTBOOK_SITE_GUESTBOOK)) { $iSendEmail = variable_get('guestbook_send_email', ''); } else if ($guestbook_mode & GUESTBOOK_USER_GUESTBOOKS) { $guestbook_user = ($uid != $user->uid) ? user_load(array('uid' => $uid, 'status' => 1)) : $user; if ($guestbook_user->uid && $guestbook_user->guestbook_status == 0) { $iSendEmail = $guestbook_user->guestbook_send_email; } } $from = variable_get('site_mail', ini_get('sendmail_from')); if ($iSendEmail != '') { drupal_mail('guestbook_notification', $iSendEmail, 'New guestbook entry', $message, $from); } // Insert new message if (_guestbook_access('post', $uid) == 'allowed') { if ($user->uid == 0) { // anonymous user $entryid = db_next_id('{guestbook}_id'); $result = db_query("INSERT INTO {guestbook} (id, anonname, anonemail, anonwebsite, author, recipient, message, created, cip4) VALUES(%d, '%s', '%s', '%s', %d, %d, '%s', %d, '%s')", $entryid, $edit['anonname'], $edit['anonemail'], $edit['anonwebsite'], 0, $uid, $message, time(), $myrealip); } else { // registered user $entryid = db_next_id('{guestbook}_id'); $result = db_query("INSERT INTO {guestbook} (id, author, recipient, message, created, cip4) VALUES(%d, %d, %d, '%s', %d, '%s')", $entryid, $user->uid, $uid, $message, time(), $myrealip); } } return 'guestbook/'. $uid; } function theme_guestbook_form_entry_form($form) { $output = ''; $access = $form['access']['#value']; $display = $form['display']['#value']; $uid = $form['uid']['#value']; switch ($access) { case 'allowed': if ($display == 'link') { // output only a link to a page with the form $output .= '

» '. l(t('Add guestbook entry'), "guestbook/$uid/form") .'

'; } else { $output .= $display == 'page' ? '' : '

'. t('Add guestbook entry') .'

'; $output .= drupal_render($form); } break; case 'own guestbook': $output .= ' '; break; case 'not logged in': $output .= ''; break; case 'not allowed': $output .= ''; break; } return $output; } function guestbook_form_comment($uid, $entry) { $output = drupal_get_form('guestbook_form_comment_form', $uid, $entry); return $output; } function guestbook_form_comment_form($uid, $entry) { $form = array(); //'#type' => 'textfield', '#default_value' => check_plain($entry['comment']), '#size' => 64); $form['comment'] = array( '#type' => 'textarea', '#cols' => 10, '#rows' => 4, '#title' => t('Admin Comment'), '#description' => $filter_tips, '#default_value' => check_plain( $entry['comment'])); $form['submit'] = array( '#type' => 'submit', '#value' => t('Comment')); $form['entry_id'] = array('#type' => 'value', '#value' => $entry['id']); $form['uid'] = array('#type' => 'value', '#value' => $uid); return $form; } function guestbook_form_comment_form_submit($form_id, $edit) { global $user; if (_guestbook_access('administer', $edit['uid'])) { db_query("UPDATE {guestbook} SET comment = '%s', commentauthor = %d WHERE id = %d", $edit['comment'], $user->uid, $edit['entry_id']); } return array('guestbook/'. $edit['uid'], $_GET['page'] ? 'page='. $_GET['page'] : NULL); } function theme_guestbook_form_comment_form($form) { $output = ''; $output .= '
'; $output .= drupal_render($form); $output .= '
'; return $output; } function guestbook_delete_entry_confirm_page($uid, $entry_id) { return drupal_get_form('guestbook_delete_entry_confirm', $uid, $entry_id ); } function guestbook_delete_entry_confirm($uid, $entry_id) { $entry = db_fetch_array(db_query( "SELECT g.*, u1.name, u1.data, u1.picture, u2.name as commentby FROM {guestbook} g LEFT JOIN {users} u1 ON g.author = u1.uid LEFT JOIN {users} u2 ON g.commentauthor = u2.uid WHERE g.id = %d", $entry_id)); $form = array(); $form['entry_id'] = array('#type' => 'value', '#value' => $entry_id); $form['uid'] = array('#type' => 'value', '#value' => $uid); return confirm_form( $form, t('Are you sure you want to delete this guestbook entry?\n'), 'guestbook/'. $uid, theme('guestbook_entry', $uid, $entry, NULL, true), t('Delete'), t('Cancel')); } function guestbook_delete_entry_confirm_submit($form_id, $form_values) { if (_guestbook_access('administer', $form_values['uid']) && $form_values['confirm']) { db_query("DELETE FROM {guestbook} WHERE id = %d", $form_values['entry_id']); } return 'guestbook/'. $form_values['uid']; } /** * Guestbook theme functions */ function theme_guestbook($uid, $entries, $comment_entry, $limit = 20) { global $user; $form_location = variable_get('guestbook_form_location', 'above'); $pager_position = variable_get('guestbook_pager_position', GUESTBOOK_PAGER_BELOW); // intro text $intro = _guestbook_info($uid, 'intro'); $output = $intro ? check_markup($intro) : ''; $output .= _guestbook_user_profile_link($uid); // form on separate page $output .= $form_location == 'separate page' ? guestbook_form_entry($uid, 'link') : ''; // form and pager above entries $output .= $form_location == 'above' ? guestbook_form_entry($uid) : ''; $output .= $pager_position & GUESTBOOK_PAGER_ABOVE ? theme('pager', NULL, $limit, 0) : ''; foreach ($entries as $entry) { $output .= theme('guestbook_entry', $uid, $entry, $comment_entry); } // form and pager below entries $output .= $pager_position & GUESTBOOK_PAGER_BELOW ? theme('pager', NULL, $limit, 0) : ''; $output .= $form_location == 'below' ? guestbook_form_entry($uid) : ''; return '
'. $output ."
\n"; } function theme_guestbook_entry($uid, $entry, $comment_entry = NULL, $confirm_delete = false) { global $user; $output = ''; $guestbook_iconpath = variable_get('guestbook_icon_path',''); $guestbook_infostyle = !variable_get('guestbook_info_style',''); $guestbook_ipview = variable_get('guestbook_ip_view', GUESTBOOK_IP_VIEW_ADMIN); $display = (array) variable_get('guestbook_display', array('date', 'email', 'website', 'comments','userip')); $output .= "\n
\n"; if ($comment_entry == $entry['id']) { $output .= ''; } // author if ($entry['author'] == 0) { $author = "" . check_plain($entry['anonname']) . ""; } else { $author = "" . theme('guestbook_user_picture', $entry['author']) .""; } $output .= '
' . $author .'
'; // website, email, date, userip $output .= '
'; if (in_array('website', $display) && !empty($entry['anonwebsite'])) { $output .= $guestbook_infostyle ? ' | ' . t('Website') . ' ' : ''; } if (in_array('email', $display) && !empty($entry['anonemail'])) { $output .= $guestbook_infostyle ? ' | ' . t('E-mail') . '' : ''; } if (in_array('date', $display)) { $output .= $guestbook_infostyle ? ' | ' . format_date($entry['created'], 'medium') : ''; } if ($guestbook_ipview | _guestbook_access('administer', $uid)) { if (in_array('userip', $display) && !empty($entry['cip4'])) { $output .= $guestbook_infostyle ? ' | ' . t('IP Address: ') . $entry['cip4'] : '' . t('IP Address: ') . $entry['cip4'] . ''; } } $output .= '
'; // message $output .= '
'. check_markup($entry['message'], variable_get('guestbook_input_format',1)) .'
'; if ($entry['picture']) { $output .= '
'; } // comment $output .= theme('guestbook_entry_comment', $uid, $entry, $comment_entry); // links if (_guestbook_access('administer', $uid) && !$confirm_delete) { if ($comment_entry != $entry['id']) { $pager = $_GET['page'] ? 'page='. $_GET['page'] : NULL; $output .= ''; } } $output .= "\n
"; return $output; } // // Copy of theme_user_picture, with adjustments // function theme_guestbook_user_picture($uid) { $account = user_load(array('uid' => $uid)); $output = $account->name ; if (variable_get('user_pictures', 0)) { if ($account->picture && file_exists($account->picture)) { $picture = file_create_url($account->picture); } else if (variable_get('user_picture_default', '')) { $picture = variable_get('user_picture_default', ''); } if (variable_get('guestbook_mode', -1) == GUESTBOOK_SITE_GUESTBOOK && user_access('access user profiles')) { $user_link = "user/$account->uid"; $user_text = t('View user profile.'); } else if (user_access('access user guestbooks')) { $user_link = "guestbook/$account->uid"; $user_text = t('View user guestbook.'); } else { $user_link = 'guestbook'; $user_text = t('View guestbooks.'); } $output = l($account->name ? $account->name : variable_get('anonymous', 'Anonymous'), $user_link, array("title" => $user_text)); if (isset($picture)) { $alt = t("@user's picture", array('@user' => $account->name ? $account->name : variable_get('anonymous', 'Anonymous'))); $picture = theme('image', $picture, $alt, $alt, '', false); if (!empty($account->uid) && user_access('access user profiles')) { $picture = l($picture, $user_link, array('title' => $user_text), NULL, NULL, FALSE, TRUE); } $output .= "
$picture
"; } } return $output; } function theme_guestbook_entry_comment($uid, $entry, $comment_entry) { $display = (array) variable_get('guestbook_display', array('date', 'email','website', 'comments')); $output = ''; if ($comment_entry == $entry['id']) { // display comment edit form $output .= guestbook_form_comment($uid, $entry); } else if (in_array('comments', $display) && $entry['comment'] != '') { // display comment $commentby = user_access('access user profiles') ? l($entry['commentby'], "user/{$entry['commentauthor']}") : $entry['commentby']; $output .= ''. t('Comment by') .' '. $commentby ."
"; $output .= ''. check_plain($entry['comment']) .''; } return '
'. $output .'
'; } function theme_guestbook_list($guestbooks, $header, $limit = 40) { $output = ''; // site guestbook if (isset($guestbooks[0])) { $output .= '

'. l(t('Site guestbook'), 'guestbook/0'); $output .= ' ('. format_plural($guestbooks[0]['num'], '1 entry', '@count entries') .', '. t('last update') .': '. _guestbook_timeinterval($guestbooks[0]['created']) .')

'; unset($guestbooks[0]); } // user guestbooks if (count($guestbooks)) { $output .= '

'. t('User guestbooks') .'

'; $rows = array(); foreach ($guestbooks as $guestbook) { $rows[] = array( l($guestbook['name'], 'guestbook/'. $guestbook['uid']), format_plural($guestbook['num'], '1 entry', '@count entries'), array('data' => _guestbook_timeinterval($guestbook['created']), 'align' => 'right')); } $output .= theme('table', $header, $rows); } $output .= theme('pager', NULL, $limit, 0); return $output; } /** * Returns the title or the intro text of the guestbook specified by $uid */ function _guestbook_info($uid, $data) { global $user; static $info; $guestbook_mode = variable_get('guestbook_mode', GUESTBOOK_SITE_GUESTBOOK | GUESTBOOK_USER_GUESTBOOKS); if (!isset($info[$uid])) { if ($uid == 0 && ($guestbook_mode & GUESTBOOK_SITE_GUESTBOOK)) { $info[$uid]['title'] = variable_get('guestbook_site_title', t('Site guestbook')); $info[$uid]['intro'] = variable_get('guestbook_site_intro', ''); } else if ($guestbook_mode & GUESTBOOK_USER_GUESTBOOKS) { $guestbook_user = ($uid != $user->uid) ? user_load(array('uid' => $uid, 'status' => 1)) : $user; if ($guestbook_user->uid && $guestbook_user->guestbook_status == 0) { $info[$uid]['title'] = t("@username's guestbook", array('@username' => $guestbook_user->name)); $info[$uid]['intro'] = $guestbook_user->guestbook_intro; } } } return $info[$uid][$data]; } /** * Return a link to $uid's profile if context allows it */ function _guestbook_user_profile_link($uid) { global $user; $guestbook_mode = variable_get('guestbook_mode', GUESTBOOK_SITE_GUESTBOOK | GUESTBOOK_USER_GUESTBOOKS); $output = ''; if ($guestbook_mode & GUESTBOOK_USER_GUESTBOOKS && user_access('access user profiles') && $uid != $user->uid) { $guestbook_user = user_load(array('uid' => $uid, 'status' => 1)); if ($guestbook_user->uid && $guestbook_user->guestbook_status == 0) { $namelink = l($guestbook_user->name, "user/$uid", array('title' => t('View user profile.'))); $output .= '
' . t("Visit !username's profile", array('!username' => $namelink)) . '
'; } } return $output; } /** * Returns if the guestbook specified by $uid exists */ function _guestbook_exists($uid) { $title = _guestbook_info($uid, 'title'); return !empty($title); } /** * Returns if current user is allowed to perform $action in guestbook $uid */ function _guestbook_access($action, $uid) { global $user; switch ($action) { case 'post': if (($uid == 0 ? user_access('post in site guestbook') : user_access('post in user guestbooks'))) { if (!($user->uid == $uid && $user->uid > 0)) { return 'allowed'; } else { return 'own guestbook'; } } else if ($user->uid == 0) { return 'not logged in'; } else if ($user->uid != $uid) { return 'not allowed'; } break; case 'administer': return user_access('administer all guestbooks') || $uid == $user->uid && $user->uid > 0; } } /** * Returns a string representation of a time interval */ function _guestbook_timeinterval($time) { if ($time == 0) { return t('never'); } else { return format_interval(time() - $time, 1); } } /** * Fetches number of new entries for current user */ function _guestbook_newentries() { global $user; $count = db_result(db_query("SELECT COUNT(created) FROM {guestbook} WHERE recipient = %d AND created > %d", $user->uid, $user->guestbook_visited)); return $count; } function _guestbook_form_filter_tips() { $format = variable_get('guestbook_input_format', 1); $tips = theme('filter_tips', _filter_tips($format)); return $tips; } function _guestbook_spam($source, $id, $header, $body, $probability, $old, $action) { if ($probability > 98 ) { $msgtext = t('Entry is spam: ') . $header . ' ' . $body . ' probability: ' . $probability; watchdog('guestbook', $msgtext, WATCHDOG_WARNING); drupal_set_message($msgtext, 'error'); return TRUE; } return FALSE; }