<?php

require_once dirname(__FILE__) . '/accesscheck.php';

function parseRSSTemplate($template, $data)
{
    foreach ($data as $key => $val) {
        if (!preg_match("#^\d+$#", $key)) {
            #      print "$key => $val<br/>";
            $template = preg_replace('#\[' . preg_quote($key) . '\]#i', $val, $template);
        }
    }
    $template = preg_replace("/\[[A-Z\. ]+\]/i", '', $template);

    return $template;
}

function updateRSSStats($items, $type)
{
    global $tables;
    if (!is_array($items)) {
        return;
    }
    foreach ($items as $item) {
        Sql_Query("update {$tables['rssitem']} set $type = $type + 1 where id = $item");
    }
}

function rssUserHasContent($userid, $messageid, $frequency)
{
    global $tables;
    switch ($frequency) {
        case 'weekly':
            $interval = 'interval 7 day';
            break;
        case 'monthly':
            $interval = 'interval 1 month';
            break;
        case 'daily':
        default:
            $interval = 'interval 1 day';
            break;
    }

    $cansend_req = Sql_Query(sprintf('select date_add(last,%s) < now() from %s where userid = %d',
        $interval, $tables['user_rss'], $userid));
    $exists = Sql_Affected_Rows();
    $cansend = Sql_Fetch_Row($cansend_req);
    if (!$exists || $cansend[0]) {
        # we can send this user as far as the frequency is concerned
        # now check whether there is actually some content

        # check what lists to use. This is the intersection of the lists for the
        # user and the lists for the message
        $lists = array();
        $listsreq = Sql_Query(sprintf('
      select %s.listid from %s,%s where %s.listid = %s.listid and %s.userid = %d and
      %s.messageid = %d',
            $tables['listuser'], $tables['listuser'], $tables['listmessage'],
            $tables['listuser'], $tables['listmessage'],
            $tables['listuser'], $userid, $tables['listmessage'], $messageid));
        while ($row = Sql_Fetch_Row($listsreq)) {
            array_push($lists, $row[0]);
        }
        if (!count($lists)) {
            return 0;
        }
        $liststosend = implode(',', $lists);
        # request the rss items that match these lists and that have not been sent to this user
        $itemstosend = array();
        $max = sprintf('%d', getConfig('rssmax'));
        if (!$max) {
            $max = 30;
        }

        $itemreq = Sql_Query("select {$tables['rssitem']}.*
      from {$tables['rssitem']} where {$tables['rssitem']}.list in ($liststosend) order by added desc, list,title limit $max");
        while ($item = Sql_Fetch_Array($itemreq)) {
            Sql_Query("select * from {$tables['rssitem_user']} where itemid = {$item['id']} and userid = $userid");
            if (!Sql_Affected_Rows()) {
                array_push($itemstosend, $item['id']);
            }
        }
        #  print "<br/>Items to send for user $userid: ".sizeof($itemstosend);
        # if it is less than the threshold return nothing
        $threshold = getConfig('rssthreshold');
        if (count($itemstosend) >= $threshold) {
            return $itemstosend;
        } else {
            return array();
        }
    }

    return array();
}
