Location: PHPKode > projects > TaskFreak Original > rss.php
<?php
/****************************************************************************\
* TaskFreak!                                                                 *
* multi user                                                                 *
******************************************************************************
* Version: 0.6.3                                                             *
* Authors: Stan Ozier <hide@address.com>                                  *
* License:  http://www.gnu.org/licenses/gpl.txt (GPL)                        *
******************************************************************************
* This file is part of "TaskFreak! single user" program.                     *
*                                                                            *
* TaskFreak! single user is free software; you can redistribute it and/or    *
* modify it under the terms of the GNU General Public License as published   *
* by the Free Software Foundation; either version 2 of the License, or (at   *
* your option) any later version.                                            *
*                                                                            *
* TaskFreak! single user is distributed in the hope that it will be          *
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of     *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
* GNU General Public License for more details.                               *
*                                                                            *
* You should have received a copy of the GNU General Public License          *
* along with this program; if not, write to the Free Software                *
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA *
\****************************************************************************/


include './_include.php';

include PRJ_CLASS_PATH.'tzn_generic.php';
include PRJ_CLASS_PATH.TZN_DB_CLASS;
include PRJ_CLASS_PATH.'tzn_user.php';

include PRJ_CLASS_PATH.'pkg_member.php';
include PRJ_CLASS_PATH.'pkg_project.php';

$objItemList = new ItemStats();

// --- check user ---------------------------------------------------------
$pUserIsLoggedIn = false;

$objUser = new Member();

if ($pUserName = Tzn::getReg($_REQUEST['user'],"^[a-zA-Z0-9]+$")) {
	if ($objUser->loadByKey('username',$pUserName)) {
		$pUserIsLoggedIn = $objUser->checkRssCode($_REQUEST['c']);
	}
}
// --- Filter per date -----------------------------------------------------

// show today's tasks

$sqlFilter = '((deadlineDate >= \''
    .strftime(TZN_DATE_SQL,PRJ_DTE_NOW).'\' AND statusKey < '
    .FRK_STATUS_LEVELS.')'.' OR statusKey < '.FRK_STATUS_LEVELS.')';
if (@constant('FRK_NO_DEADLINE_TOO')) {
    // show tasks with no deadline (unplanned tasks)
    $sqlFilter .= ' AND deadlineDate <> \'9999-00-00\'';
} else {
    $sqlFilter = '('.$sqlFilter
    	.' OR (deadlineDate = \'9999-00-00\' AND statusKey < '
        .FRK_STATUS_LEVELS.'))';
}

$objItemList->addDateFilter($sqlFilter);

// --- Filter per user's projects -----------------------------------------

$pOwnOnly = @constant('FRK_DEFAULT_RSS_OWN_ONLY');

if (!$pOwnOnly) {
	$objUserProjectList = new ProjectStats();
	$objUserProjectList->addOrder('statusKey ASC, name ASC');
	$objUserProjectList->addHaving('projectStatus_statusKey < 40');
	$objUserProjectList->loadList($objUser->id,(!$objUser->checkLevel(6)));
	
	// user can only access his own projects
	if ($objUserProjectList->rMore()) {
	        $arrProject = array();
	        while($objTmp = $objUserProjectList->rNext()) {
	            $arrProject[] = $objTmp->id;
	        }
	        $objItemList->addWhere('(ii.projectId IN ('.implode(',',$arrProject).')'
				.' OR ii.memberId = '.$objUser->id.' OR ii.authorId = '
				.$objUser->id.')');
	        unset($arrProject);
	} else {
		$pOwnOnly = true;
	}
}

if ($pOwnOnly) {
	// no project to look at? just list own tasks then!
	$objItemList->addWhere('ii.memberId='.$objUser->id
		.' OR ii.authorId='.$objUser->id);
}

// --- private tasks --------------------------------------------------------

$sqlFilter = '(showPrivate';
if ($objUser->checkLevel(12)) {
    $sqlFilter .= ' < 2';
} else {
    $sqlFilter .= ' = 0';
}
$sqlFilter .= ' OR (showPrivate = 2 AND (ii.authorId = '.$objUser->id
	.' OR ii.memberId = '.$objUser->id.')))';
$objItemList->addWhere($sqlFilter);


// --- Task order ---------------------------------------------------------

$pSort = ($_REQUEST['sort'])?$_REQUEST['sort']:
	((defined('FRK_SORT_COLUMN'))?FRK_SORT_COLUMN:'deadlineDate');
$pDir = ($_REQUEST['dir'])?$_REQUEST['dir']:
	((defined('FRK_SORT_ORDER'))?FRK_SORT_ORDER:1);
$objItemList->setOrder($pSort,$pDir);

// number of items to load

if ($pUserIsLoggedIn && defined('FRK_DEFAULT_RSS_SIZE')) {

    $objItemList->addWhere('ii.memberId='.$objUser->id);
    $objItemList->setPagination(FRK_DEFAULT_RSS_SIZE);
    $objItemList->loadList();
    
}

header('Content-type: text/xml');
echo '<'.'?xml version="1.0"?'.'>';
echo "\n";
?>
<rss version="2.0">
<channel>
<title>TaskFreak! Todo list</title>
<link><?php echo PRJ_WWW_URL; ?></link>
<?php
if ($pUserIsLoggedIn && $objItemList->rMore()) {
    while ($objItem = $objItemList->rNext()) {
        $pProject = '';
        if ($objItem->project->name) {
            $pProject = $objItem->project->get('name').': ';
        }
?>
<item>
<title><![CDATA[<?php echo $pProject.$objItem->title; ?>]]></title>
<?php 
        if ($objItem->deadlineDate != '9999-00-00' || $objItem->description) { 
?>
<description><![CDATA[<?php
            if ($objItem->deadlineDate != '9999-00-00') {
                echo '['.$objItem->getDte('deadlineDate','SHT').'] ';
            }
            if ($objItem->description) {
                echo "\n".$objItem->description;
            }
?>]]></description>
<?php
        }
?>
<link><?php echo PRJ_WWW_URL; ?>?rssId=<?php echo $objItem->id; ?></link>
</item>
<?php
    }

} else {
    include PRJ_INCLUDE_PATH.'language/'.FRK_DEFAULT_LANGUAGE.'/freak.php'; 
?>
<item>
    <title><?php
        if ($pUserIsLoggedIn) {
            echo $langRss['no_task'];
        } else {
            echo $langRss['error_login'];
        }
    ?></title>
    <link><?php echo PRJ_WWW_URL; ?></link>
</item>

<?php
}
?>
</channel>
</rss>
Return current item: TaskFreak Original