Code: Select all
<?php
/**
*
* @package Board3 Portal v2 - Default
* @copyright (c) Board3 Group ( www.board3.de )<br>
* @aenderungen: cpg
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* @package portal_treffenside
*/
class portal_treffenside_module
{
/**
* Allowed columns: Just sum up your options (Exp: left + right = 10)
* top 1
* left 2
* center 4
* right 8
* bottom 16
*/
public $columns = 10;
/**
* Default modulename
*/
public $name = 'PORTAL_TREFFENSIDE';
/**
* Default module-image:
* file must be in "{T_THEME_PATH}/images/portal/"
*/
public $image_src = 'recentside.png';
/**
* module-language file
* file must be in "language/{$user->lang}/mods/portal/"
*/
public $language = 'portal_treffenside_module';
public $custom_acp_tpl = '';
public function get_template_side($module_id)
{
global $config, $template, $db, $auth, $phpbb_root_path, $phpEx;
//
// Exclude forums
//
$sql_where = '';
// orig if ($config['board3_forum_' . $module_id] > 0)
if ($config['board3_treffenside_forum_' . $module_id] > 0)
{
//orig $exclude_forums = explode(',', $config['board3_treffenside_forum_' . $module_id]);
$exclude_forums = explode(',', $config['board3_treffenside_forum_' . $module_id]);
$sql_where = ' AND ' . $db->sql_in_set('forum_id', array_map('intval', $exclude_forums), ($config['board3_treffenside_exclude_forums_' . $module_id]) ? true : false);
}
// Get a list of forums the user cannot read
$forum_ary = array_unique(array_keys($auth->acl_getf('!f_read', true)));
// Determine first forum the user is able to read (must not be a category)
$sql = 'SELECT forum_id
FROM ' . FORUMS_TABLE . '
WHERE forum_type = ' . FORUM_POST;
$forum_sql = '';
if (sizeof($forum_ary))
{
$sql .= ' AND ' . $db->sql_in_set('forum_id', $forum_ary, true);
$forum_sql = ' AND ' . $db->sql_in_set('t.forum_id', $forum_ary, true);
}
$result = $db->sql_query_limit($sql, 1);
$g_forum_id = (int) $db->sql_fetchfield('forum_id');
$db->sql_freeresult($result);
//
// Recent announcements
//
$sql = 'SELECT topic_title, forum_id, topic_id
FROM ' . TOPICS_TABLE . ' t
WHERE topic_status <> ' . FORUM_LINK . '
AND topic_approved = 1
AND (topic_type = ' . POST_ANNOUNCE . ' OR topic_type = ' . POST_GLOBAL . ')
AND topic_moved_id = 0
' . $sql_where . '' . $forum_sql . '
ORDER BY topic_time DESC';
$result = $db->sql_query_limit($sql, $config['board3_treffenside_max_topics_' . $module_id]);
while(($row = $db->sql_fetchrow($result)) && ($row['topic_title']))
{
// auto auth
if (($auth->acl_get('f_read', $row['forum_id'])) || ($row['forum_id'] == '0'))
{
$template->assign_block_vars('latex_announcements', array(
//orig 'TITLE' => character_limit($row['topic_title'], $config['board3_recent_title_limit_' . $module_id]),
'TITLE' => character_limit($row['topic_title'], $config['board3_treffenside_title_limit_' . $module_id]),
'FULL_TITLE' => censor_text($row['topic_title']),
'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . (($row['forum_id'] == 0) ? $g_forum_id : $row['forum_id']) . '&t=' . $row['topic_id'])
));
}
}
$db->sql_freeresult($result);
//
// Recent topic (only show normal topic)
//
$sql = 'SELECT topic_title, forum_id, topic_id
FROM ' . TOPICS_TABLE . ' t
WHERE topic_status <> ' . ITEM_MOVED . '
AND topic_approved = 1
AND topic_type = ' . POST_NORMAL . '
AND topic_moved_id = 0
' . $sql_where . '' . $forum_sql . '
ORDER BY topic_time ASC';
$result = $db->sql_query_limit($sql, $config['board3_treffenside_max_topics_' . $module_id]);
//if ($data['forum_id'] != 2)
while(($row = $db->sql_fetchrow($result)) && ($row['topic_title']))
{
// auto auth
if (($auth->acl_get('f_read', $row['forum_id'])) || ($row['forum_id'] == '0'))
{
$template->assign_block_vars('latex_topics', array(
//orig 'TITLE' => character_limit($row['topic_title'], $config['board3_recent_title_limit_' . $module_id]),
'TITLE' => character_limit($row['topic_title'], $config['board3_treffenside_title_limit_' . $module_id]),
'FULL_TITLE' => censor_text($row['topic_title']),
'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . '&t=' . $row['topic_id'])
));
}
}
$db->sql_freeresult($result);
return 'treffen_side.html';
}
public function get_template_acp($module_id)
{
return array(
'title' => 'ACP_PORTAL_TREFFENSIDE_SETTINGS',
'vars' => array(
'legend1' => 'ACP_PORTAL_TREFFENSIDE_SETTINGS',
'board3_treffenside_max_topics_' . $module_id => array('lang' => 'PORTAL_TREFFENSIDE_MAX_TOPIC', 'validate' => 'int', 'type' => 'text:3:3', 'explain' => true),
'board3_treffenside_title_limit_' . $module_id => array('lang' => 'PORTAL_TREFFENSIDE_TITLE_LIMIT', 'validate' => 'int', 'type' => 'text:3:3', 'explain' => true),
'board3_treffenside_forum_' . $module_id => array('lang' => 'PORTAL_TREFFENSIDE_FORUM', 'validate' => 'string', 'type' => 'custom', 'explain' => true, 'method' => 'select_forums', 'submit' => 'store_selected_forums'),
'board3_treffenside_exclude_forums_' . $module_id => array('lang' => 'PORTAL_TREFFENSIDE_EXCLUDE_FORUM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
)
);
}
/**
* API functions
*/
public function install($module_id)
{
set_config('board3_treffenside_max_topics_' . $module_id, 10);
set_config('board3_treffenside_title_limit_' . $module_id, 100);
set_config('board3_treffenside_forum_' . $module_id, '');
set_config('board3_treffenside_exclude_forums_' . $module_id, 1);
return true;
}
public function uninstall($module_id)
{
global $db;
$del_config = array(
'board3_treffenside_max_topics_' . $module_id,
'board3_treffenside_title_limit_' . $module_id,
'board3_treffenside_forum_' . $module_id,
'board3_treffenside_exclude_forums_' . $module_id,
);
$sql = 'DELETE FROM ' . CONFIG_TABLE . '
WHERE ' . $db->sql_in_set('config_name', $del_config);
return $db->sql_query($sql);
}
// Create forum select box
public function select_forums($value, $key, $module_id)
{
global $user, $config;
$forum_list = make_forum_select(false, false, true, true, true, false, true);
$selected = array();
if(isset($config[$key]) && strlen($config[$key]) > 0)
{
$selected = explode(',', $config[$key]);
}
// Build forum options
$s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
foreach ($forum_list as $f_id => $f_row)
{
$s_forum_options .= '<option value="' . $f_id . '"' . ((in_array($f_id, $selected)) ? ' selected="selected"' : '') . (($f_row['disabled']) ? ' disabled="disabled" class="disabled-option"' : '') . '>' . $f_row['padding'] . $f_row['forum_name'] . '</option>';
}
$s_forum_options .= '</select>';
return $s_forum_options;
}
// Store selected forums
public function store_selected_forums($key, $module_id)
{
global $db, $cache;
// Get selected extensions
$values = request_var($key, array(0 => ''));
$news = implode(',', $values);
set_config($key, $news);
}
}
und folgende html-Datei, die in die styles/meinStyle/templates/portal/modules kommt
die habe ich treffen_side.html genannt.
Im ACP habe ich dann ausgewählt, aus welchem Forum die "latest Postings" bei mir angezeigt werden sollen (bei mir TREFFEN). Man kann natürlich auch jedes andere Forum auswählen (bei Dir TERMINE) und die Umbenennungen dann vornehmen. Die Sortier-Reihenfolge kannst Du natürlich auch umkehren.