get('portal_config')) !== true) { $portal_config = $cached_portal_config = array(); $sql = 'SELECT config_name, config_value FROM ' . PORTAL_CONFIG_TABLE; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) { $cached_portal_config[$row['config_name']] = $row['config_value']; $portal_config[$row['config_name']] = $row['config_value']; } $db->sql_freeresult($result); $cache->put('portal_config', $cached_portal_config); } return $portal_config; } /** * Set config value. Creates missing config entry. */ function set_portal_config($config_name, $config_value) { global $db, $cache, $portal_config; $sql = 'UPDATE ' . PORTAL_CONFIG_TABLE . " SET config_value = '" . $db->sql_escape($config_value) . "' WHERE config_name = '" . $db->sql_escape($config_name) . "'"; $db->sql_query($sql); if (!$db->sql_affectedrows() && !isset($portal_config[$config_name])) { $sql = 'INSERT INTO ' . PORTAL_CONFIG_TABLE . ' ' . $db->sql_build_array('INSERT', array( 'config_name' => $config_name, 'config_value' => $config_value)); $db->sql_query($sql); } $portal_config[$config_name] = $config_value; } // include($phpbb_root_path . 'includes/message_parser.'.$phpEx); // fetch post for news & announce function phpbb_fetch_posts($forum_from, $permissions, $number_of_posts, $text_length, $time, $type, $start = 0) { global $db, $phpbb_root_path, $auth, $user, $bbcode_bitfield, $bbcode, $portal_config, $config; $posts = array(); $post_time = ($time == 0) ? '' : 'AND t.topic_time > ' . (time() - $time * 86400); $forum_from = ( strpos($forum_from, ',') !== FALSE ) ? explode(',', $forum_from) : (($forum_from != '') ? array($forum_from) : array()); $str_where = ''; $topic_icons = array(0); $have_icons = 0; if( $permissions == TRUE ) { $disallow_access = array_unique(array_keys($auth->acl_getf('!f_read', true))); } else { $disallow_access = array(); } $global_f = 0; if( sizeof($forum_from) ) { $disallow_access = array_diff($forum_from, $disallow_access); if( !sizeof($disallow_access) ) { return array(); } foreach( $disallow_access as $acc_id) { $acc_id = (int) $acc_id; $str_where .= "t.forum_id = $acc_id OR "; if( $type == 'announcements' && $global_f < 1 && $acc_id > 0 ) { $global_f = $acc_id; } } } else { foreach( $disallow_access as $acc_id ) { $acc_id = (int) $acc_id; $str_where .= "t.forum_id <> $acc_id AND "; } } switch( $type ) { case "announcements": $topic_type = '(( t.topic_type = ' . POST_ANNOUNCE . ') OR ( t.topic_type = ' . POST_GLOBAL . '))'; $str_where = ( strlen($str_where) > 0 ) ? 'AND (t.forum_id = 0 OR (' . trim(substr($str_where, 0, -4)) . '))' : ''; $user_link = 't.topic_poster = u.user_id'; $post_link = 't.topic_first_post_id = p.post_id'; $topic_order = 't.topic_time DESC'; break; case "news": $topic_type = 't.topic_type = ' . POST_NORMAL; $str_where = ( strlen($str_where) > 0 ) ? 'AND (' . trim(substr($str_where, 0, -4)) . ')' : ''; $user_link = ( $portal_config['portal_news_style'] ) ? 't.topic_poster = u.user_id' : (( $portal_config['portal_news_show_last'] ) ? 't.topic_last_poster_id = u.user_id' : 't.topic_poster = u.user_id' ) ; $post_link = ( $portal_config['portal_news_style'] ) ? 't.topic_first_post_id = p.post_id' : (( $portal_config['portal_news_show_last'] ) ? 't.topic_last_post_id = p.post_id' : 't.topic_first_post_id = p.post_id' ) ; $topic_order = ( $portal_config['portal_news_show_last'] ) ? 't.topic_last_post_time DESC' : 't.topic_time DESC' ; break; case "news_all": $topic_type = '( t.topic_type <> ' . POST_ANNOUNCE . ' ) AND ( t.topic_type <> ' . POST_GLOBAL . ')'; $str_where = ( strlen($str_where) > 0 ) ? 'AND (' . trim(substr($str_where, 0, -4)) . ')' : ''; $user_link = ( $portal_config['portal_news_style'] ) ? 't.topic_poster = u.user_id' : (( $portal_config['portal_news_show_last'] ) ? 't.topic_last_poster_id = u.user_id' : 't.topic_poster = u.user_id' ) ; $post_link = ( $portal_config['portal_news_style'] ) ? 't.topic_first_post_id = p.post_id' : (( $portal_config['portal_news_show_last'] ) ? 't.topic_last_post_id = p.post_id' : 't.topic_first_post_id = p.post_id' ) ; $topic_order = ( $portal_config['portal_news_show_last'] ) ? 't.topic_last_post_time DESC' : 't.topic_time DESC' ; break; } if( $type == 'announcements' && $global_f < 1 ) { $sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . ' WHERE forum_type = ' . FORUM_POST . ' ' . str_replace('t.', '', $str_where) . ' ORDER BY forum_id'; $result = $db->sql_query_limit($sql, 1); $row = $db->sql_fetchrow($result); if( !sizeof( $row ) ) { return array(); } $global_f = $row['forum_id']; } $sql_array = array( 'SELECT' => 't.forum_id, t.topic_id, t.topic_last_post_id, t.topic_last_post_time, t.topic_time, t.topic_title, t.topic_attachment, t.topic_views, t.poll_title, t.topic_replies, t.topic_replies_real, t.topic_poster, t.topic_type, t.topic_status, t.topic_last_poster_name, t.topic_last_poster_id, t.topic_last_poster_colour, t.icon_id, u.username, u.user_id, u.user_type, u.user_colour, p.post_id, p.poster_id, p.post_time, p.post_text, p.post_attachment, p.post_username, p.enable_smilies, p.enable_bbcode, p.enable_magic_url, p.bbcode_bitfield, p.bbcode_uid, f.forum_name, f.enable_icons', 'FROM' => array( TOPICS_TABLE => 't', ), 'LEFT_JOIN' => array( array( 'FROM' => array(USERS_TABLE => 'u'), 'ON' => $user_link, ), array( 'FROM' => array(FORUMS_TABLE => 'f'), 'ON' => 't.forum_id=f.forum_id', ), array( 'FROM' => array(POSTS_TABLE => 'p'), 'ON' => $post_link, ), ), 'WHERE' => $topic_type . ' ' . $post_time . ' AND t.topic_status <> ' . ITEM_MOVED . ' AND t.topic_approved = 1 AND t.topic_moved_id = 0 ' . $str_where, 'ORDER_BY' => $topic_order, ); $sql_array['LEFT_JOIN'][] = array('FROM' => array(TOPICS_POSTED_TABLE => 'tp'), 'ON' => 'tp.topic_id = t.topic_id AND tp.user_id = ' . $user->data['user_id']); $sql_array['SELECT'] .= ', tp.topic_posted'; $sql = $db->sql_build_query('SELECT', $sql_array); if ($number_of_posts <> 0) { $result = $db->sql_query_limit($sql, $number_of_posts, $start); } else { $result = $db->sql_query($sql); } // Instantiate BBCode if need be if ($bbcode_bitfield !== '') { $phpEx = substr(strrchr(__FILE__, '.'), 1); include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx); $bbcode = new bbcode(base64_encode($bbcode_bitfield)); } $i = 0; while ( $row = $db->sql_fetchrow($result) ) { $attachments = array(); if( $config['allow_attachments'] && $row['post_id'] ) { // Pull attachment data $sql2 = 'SELECT * FROM ' . ATTACHMENTS_TABLE . ' WHERE post_msg_id = '. $row['post_id'] .' AND in_message = 0 ORDER BY filetime DESC'; $result2 = $db->sql_query($sql2); while ($row2 = $db->sql_fetchrow($result2)) { $attachments[] = $row2; } $db->sql_freeresult($result2); } $posts[$i]['bbcode_uid'] = $row['bbcode_uid']; $len_check = $row['post_text']; $maxlen = $text_length; if (($text_length != 0) && (strlen($len_check) > $text_length)) { $message = censor_text(get_sub_taged_string(str_replace("\n", '
', $row['post_text']), $row['bbcode_uid'], $maxlen)); $posts[$i]['striped'] = true; } else { $message = censor_text( str_replace("\n", '
', $row['post_text']) ); } // Second parse bbcode here if ($row['bbcode_bitfield']) { $bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']); } if (!empty($attachments)) { parse_attachments($row['forum_id'], $message, $attachments, $update_count); } $message = smiley_text($message); // Always process smilies after parsing bbcodes if( $global_f < 1 ) { $global_f = $row['forum_id']; } $topic_icons[] = $row['enable_icons']; $have_icons = ( $row['icon_id'] > 0 ) ? 1 : $have_icons; $posts[$i] = array_merge($posts[$i], array( 'post_text' => ap_validate($message), 'topic_id' => $row['topic_id'], 'topic_last_post_id' => $row['topic_last_post_id'], 'topic_type' => $row['topic_type'], 'topic_posted' => (isset($row['topic_posted']) && $row['topic_posted']) ? true : false, 'icon_id' => $row['icon_id'], 'topic_status' => $row['topic_status'], 'forum_id' => $row['forum_id'], 'topic_replies' => $row['topic_replies'], 'topic_replies_real' => $row['topic_replies_real'], 'topic_time' => $user->format_date($row['post_time']), 'topic_last_post_time' => $row['topic_last_post_time'], 'topic_title' => $row['topic_title'], 'username' => $row['username'], 'username_full' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour'], $row['post_username']), 'username_full_last' => get_username_string('full', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour'], $row['topic_last_poster_name']), 'user_id' => $row['user_id'], 'user_type' => $row['user_type'], 'user_colour' => $row['user_colour'], 'poll' => ($row['poll_title']) ? true : false, 'attachment' => ($row['topic_attachment']) ? true : false, 'topic_views' => $row['topic_views'], 'forum_name' => $row['forum_name'], 'attachments' => (!empty($attachments)) ? $attachments : array(), )); $posts['global_id'] = $global_f; $i++; } $posts['topic_icons'] = ( (max($topic_icons) > 0 ) && $have_icons ) ? true : false; $posts['topic_count'] = $i; if( $global_f < 1 ) { return array(); } else { return $posts; } } /** * Censor title, return short title * * @param $title string title to censor * @param $limit int short title character limit * */ function character_limit(&$title, $limit = 0) { $title = censor_text($title); if ($limit > 0) { return (strlen(utf8_decode($title)) > $limit + 3) ? truncate_string($title, $limit) . '...' : $title; } else { return $title; } } // Don't let them mess up the complete portal layout in cut messages and do some real AP magic function is_valid_bbtag($str, $bbuid) { return (substr($str,0,1) == '[') && (strpos($str, ':'.$bbuid.']') > 0); } function get_end_bbtag($tag, $bbuid) { $etag = ''; for($i=0;$i')+1); return substr($str,0,strpos($str, $lim, strlen($lim))+strlen($lim)); } function get_sub_taged_string($str, $bbuid, $maxlen) { $sl = $str; $ret = ''; $ntext = ''; $lret = ''; $i = 0; $cnt = $maxlen; $last = ''; $arr = array(); while((strlen($ntext) < $cnt) && (strlen($sl) > 0)) { $sr = ''; if (substr($sl, 0, 1) == '[') $sr = substr($sl,0,strpos($sl,']')+1); /* GESCHLOSSENE HTML-TAGS BEACHTEN */ if (substr($sl, 0, 2) == '')+1); $ret .= $sr; } else if (is_valid_bbtag($sr, $bbuid)) { if ($sr[1] == '/') { /* entfernt das endtag aus dem tag array */ $tarr = array(); $j = 0; foreach ($arr as $elem) { if (strcmp($elem[1],$sr) != 0) $tarr[$j++] = $elem; } $arr = $tarr; } else { $arr[$i][0] = $sr; $arr[$i++][1] = get_end_bbtag($sr, $bbuid); } $ret .= $sr; } else { $sr = get_next_word($sl); $ret .= $sr; $ntext .= $sr; $last = $sr; } $sl = substr($sl, strlen($sr), strlen($sl)-strlen($sr)); } $ret = trim($ret) . '...'; $ap = ''; foreach ($arr as $elem) { $ap = $elem[1] . $ap; } $ret .= $ap; return $ret; } function ap_validate($str) { $s = str_replace('
', '
', $str); return str_replace('
', '', $s); } /** * Pagination routine, generates archive number sequence */ function generate_portal_pagination($base_url, $num_items, $per_page, $start_item, $type, $add_prevnext_text = false, $tpl_prefix = '') { global $template, $user; switch( $type ) { case "announcements": $pagination_type = 'ap'; $anker = '#a'; break; case "news": case "news_all": $pagination_type = 'np'; $anker = '#n'; break; } // Make sure $per_page is a valid value $per_page = ($per_page <= 0) ? 1 : $per_page; $seperator = '' . $user->lang['COMMA_SEPARATOR'] . ''; $total_pages = ceil($num_items / $per_page); if ($total_pages == 1 || !$num_items) { return false; } $on_page = floor($start_item / $per_page) + 1; $url_delim = (strpos($base_url, '?') === false) ? '?' : '&'; $page_string = ($on_page == 1) ? '1' : '1'; if ($total_pages > 5) { $start_cnt = min(max(1, $on_page - 4), $total_pages - 5); $end_cnt = max(min($total_pages, $on_page + 4), 6); $page_string .= ($start_cnt > 1) ? ' ... ' : $seperator; for ($i = $start_cnt + 1; $i < $end_cnt; $i++) { $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; if ($i < $end_cnt - 1) { $page_string .= $seperator; } } $page_string .= ($end_cnt < $total_pages) ? ' ... ' : $seperator; } else { $page_string .= $seperator; for ($i = 2; $i < $total_pages; $i++) { $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; if ($i < $total_pages) { $page_string .= $seperator; } } } $page_string .= ($on_page == $total_pages) ? '' . $total_pages . '' : '' . $total_pages . ''; if ($add_prevnext_text) { if ($on_page != 1) { $page_string = '' . $user->lang['PREVIOUS'] . '  ' . $page_string; } if ($on_page != $total_pages) { $page_string .= '  ' . $user->lang['NEXT'] . ''; } } $template->assign_vars(array( $tpl_prefix . 'BASE_URL' => $base_url, 'A_' . $tpl_prefix . 'BASE_URL' => addslashes($base_url), $tpl_prefix . 'PER_PAGE' => $per_page, $tpl_prefix . 'PREVIOUS_PAGE' => ($on_page == 1) ? '' : $base_url . "{$url_delim}" . $pagination_type . '=' . (($on_page - 2) * $per_page) . $anker, $tpl_prefix . 'NEXT_PAGE' => ($on_page == $total_pages) ? '' : $base_url . "{$url_delim}" . $pagination_type . '=' . ($on_page * $per_page) . $anker, $tpl_prefix . 'TOTAL_PAGES' => $total_pages, )); return $page_string; } // Mini Cal. class calendar { var $dateYYY; // year in numeric format (YYYY) var $dateMM; // month in numeric format (MM) var $dateDD; // day in numeric format (DD) var $ext_dateMM; // extended month (e.g. February) var $daysMonth; // count of days in month var $stamp; // timestamp var $day; // return array s.a. /** * convert date->timestamp **/ function makeTimestamp($date) { $this->stamp = strtotime($date); return ($this->stamp); } /** * get date listed in array **/ function getMonth($callDate) { $this->makeTimestamp($callDate); $this->dateYYYY = date("Y", $this->stamp); $this->dateMM = date("n", $this->stamp); $this->ext_dateMM = date("F", $this->stamp); $this->dateDD = date("d", $this->stamp); $this->daysMonth = date("t", $this->stamp); for($i=1; $i < $this->daysMonth+1; $i++) { $this->makeTimestamp("$i $this->ext_dateMM $this->dateYYYY"); $this->day[] = array( "0" => "$i", "1" => $this->dateMM, "2" => $this->dateYYYY, "3" => (date('w', $this->stamp)) ); } } } ?>