0byt3m1n1
Path:
/
data
/
applications
/
aps.bak
/
webcalendar
/
1.2.0-4
/
standard
/
htdocs
/
[
Home
]
File: rss_activity_log.php
<?php /* $Id: rss_activity_log.php,v 1.1.2.2 2008/03/07 17:49:23 cknudsen Exp $ * * Description: * Generates RSS 2.0 output of the activity log. * * Like icalclient.php, this file does not use the standard web-based * user authentication. It always uses HTTP-based user authentication * since that is what RSS readers will expect. * * For details on the RSS 2.0 specification: * http://cyber.law.harvard.edu/rss/rss.html * * Input parameters: * None * * Security: * If User Access Control is on, the user must have access to * ACCESS_ACTIVITY_LOG or be an admin user. * If User Access Control is off, the user must be an admin user. * * Notes: * Changes in functionality should be coordinated with activity_log.php * since there is common code in the two files. * * If running as CGI, the following instructions should set the * PHP_AUTH_xxxx variables. This has only been tested with apache2, * so far. If using php as CGI, you'll need to include this in your * php.ini file or possibly in an .htaccess file. * * <IfModule mod_rewrite.c> * RewriteEngine on * RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] * </IfModule> */ include_once 'includes/translate.php'; require_once 'includes/classes/WebCalendar.class'; $WebCalendar =& new WebCalendar ( __FILE__ ); include 'includes/config.php'; include 'includes/dbi4php.php'; include 'includes/formvars.php'; include 'includes/functions.php'; include 'includes/access.php'; $WebCalendar->initializeFirstPhase (); include 'includes/' . $user_inc; include_once 'includes/validate.php'; include 'includes/site_extras.php'; // This next step will send a redirect to login.php, which we don't want. $WebCalendar->initializeSecondPhase (); $appStr = generate_application_name (); if ( empty ( $_SERVER['PHP_AUTH_USER'] ) && ! empty ( $_ENV['REMOTE_USER'] ) ) { list ( $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'] ) = explode ( ':', base64_decode ( substr ( $_ENV['REMOTE_USER'], 6 ) ) ); $_SERVER['PHP_AUTH_USER'] = trim ( $_SERVER['PHP_AUTH_USER'] ); $_SERVER['PHP_AUTH_PW'] = trim ( $_SERVER['PHP_AUTH_PW'] ); } unset ( $_ENV['REMOTE_USER'] ); if ( empty ( $login ) ) { if ( isset ( $_SERVER['PHP_AUTH_USER'] ) && user_valid_login ( $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'], true ) ) $login = $_SERVER['PHP_AUTH_USER']; if ( empty ( $login ) || $login != $_SERVER['PHP_AUTH_USER'] ) { $_SERVER['PHP_AUTH_PW'] = $_SERVER['PHP_AUTH_USER'] = ''; unset ( $_SERVER['PHP_AUTH_USER'] ); unset ( $_SERVER['PHP_AUTH_PW'] ); header ( 'WWW-Authenticate: Basic realm="' . $appStr . '"' ); header ( 'HTTP/1.0 401 Unauthorized' ); exit; } } load_global_settings (); load_user_preferences (); $WebCalendar->setLanguage (); // Load user name, etc. user_load_variables ( $login, '' ); // Make sure the have privileges to access the activity log if ( ! $is_admin || ( access_is_enabled () && ! access_can_access_function ( ACCESS_ACTIVITY_LOG ) ) ) die_miserable_death ( print_not_auth (2) ); $charset = ( empty ( $LANGUAGE ) ? 'iso-8859-1' : translate ( 'charset' ) ); // This should work ok with RSS, may need to hardcode fallback value. $lang = languageToAbbrev ( $LANGUAGE == 'Browser-defined' || $LANGUAGE == 'none' ? $lang : $LANGUAGE ); if ( $lang == 'en' ) $lang = 'en-us'; //the RSS 2.0 default. $appStr = generate_application_name (); $descr = $appStr . ' - ' . translate ( 'Activity Log' ); // header ( 'Content-type: application/rss+xml'); header ( 'Content-type: text/xml' ); echo '<?xml version="1.0" encoding="' . $charset . '"?> <rss version="2.0" xml:lang="' . $lang . '"> <channel> <title><![CDATA[' . $appStr . ']]></title> <link>' . $SERVER_URL . '</link> <description><![CDATA[' . $descr . ']]></description> <language>' . $lang . '</language> <generator>WebCalendar ' . $PROGRAM_VERSION . '</generator> <image> <title><![CDATA[' . $appStr . ']]></title> <link>' . $SERVER_URL . '</link> <url>http://www.k5n.us/k5n_small.gif</url> </image>' . "\n"; $num = getIntValue ( false, 'num' ); if ( empty ( $num ) || $num <= 0 || $num > 100 ) $num = 100; echo rss_activity_log ( false, $num ); echo " </channel>\n</rss>\n"; exit; /* Generate the activity log. */ function rss_activity_log ( $sys, $entries ) { global $SERVER_URL, $login; $sql_params = array (); $sql = 'SELECT wel.cal_login, wel.cal_user_cal, wel.cal_type, wel.cal_date, wel.cal_time, wel.cal_text, ' . ( $sys ? 'wel.cal_log_id FROM webcal_entry_log wel WHERE wel.cal_entry_id = 0' : 'we.cal_id, we.cal_name, wel.cal_log_id, we.cal_type, we.cal_description FROM webcal_entry_log wel, webcal_entry we WHERE wel.cal_entry_id = we.cal_id' ) . ' ORDER BY wel.cal_log_id DESC LIMIT ' . $entries; $rows = dbi_get_cached_rows ( $sql, $sql_params ); $ret = ''; for ( $i = 0; $i < count ( $rows ) && $i < $entries; $i++ ) { $row = $rows[$i]; $num = 0; $l_login = $row[0]; $l_user = $row[1]; $l_type = $row[2]; $l_date = $row[3]; $l_time = $row[4]; $l_text = $row[5]; if ( $sys ) { $l_id = $row[6]; $l_description = ''; } else { $l_eid = $row[6]; $l_ename = $row[7]; $l_id = $row[8]; $l_etype = $row[9]; $l_description = $row[10]; // convert lines to <br> if no HTML formatting found if ( strpos ( $l_description, "</" ) == false ) { $l_description = nl2br ( $l_description ); } } $num++; $unixtime = date_to_epoch ( $l_date . $l_time ); $subject = display_activity_log ( $l_type, $l_text, "\n" ); $ret .= "<item>\n" . ' <title><![CDATA[' . $subject . ': ' . htmlspecialchars ( $l_ename ) . ']]></title>' . "\n <link>" . $SERVER_URL . 'view_entry.php?id=' . $l_eid . "</link>\n" . ' <description><![CDATA[' . $l_description . ']]></description>' . "\n"; //$ret .= // ' <category><![CDATA[' . $category . ']]></category>' . "\n"; /* RSS 2.0 date format Wed, 02 Oct 2002 13:00:00 GMT */ $ret .= '<pubDate>' . gmdate ( 'D, d M Y H:i:s', $unixtime ) . ' GMT</pubDate>' . "\n" . ' <guid>' . $SERVER_URL . 'view_entry.php?id=' . $l_eid . '&friendly=1&rssuser=' . $login . '&date=' . $l_date . "</guid>\n"; $ret .= "</item>\n\n"; } return $ret; } ?>