diff --git a/config/services.yml b/config/services.yml
index 70fb892d..c0f9cf52 100644
--- a/config/services.yml
+++ b/config/services.yml
@@ -40,6 +40,145 @@ services:
tags:
- { name: service_collection, tag: board3.module }
+ board3.module.announcements:
+ class: \board3\portal\modules\announcements
+ arguments:
+ - @auth
+ - @cache
+ - @config
+ - @template
+ - @dbal.conn
+ - %core.php_ext%
+ - %core.root_path%
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.attachments:
+ class: \board3\portal\modules\attachments
+ arguments:
+ - @auth
+ - @config
+ - @template
+ - @dbal.conn
+ - %core.php_ext%
+ - %core.root_path%
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.birthday_list:
+ class: \board3\portal\modules\birthday_list
+ arguments:
+ - @config
+ - @template
+ - @dbal.conn
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.calendar:
+ class: \board3\portal\modules\calendar
+ arguments:
+ - @config
+ - @template
+ - @dbal.conn
+ - %core.root_path%
+ - %core.php_ext%
+ - @user
+ - @path_helper
+ tags:
+ - { name: board3.module }
+
+ board3.module.custom:
+ class: \board3\portal\modules\custom
+ arguments:
+ - @config
+ - @template
+ - @dbal.conn
+ - %core.root_path%
+ - %core.php_ext%
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.forumlist:
+ class: \board3\portal\modules\forumlist
+ arguments:
+ - @auth
+ - @config
+ - @template
+ - %core.root_path%
+ - %core.php_ext%
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.friends:
+ class: \board3\portal\modules\friends
+ arguments:
+ - @auth
+ - @config
+ - @dbal.conn
+ - @template
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.latest_bots:
+ class: \board3\portal\modules\latest_bots
+ arguments:
+ - @config
+ - @dbal.conn
+ - @template
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.latest_members:
+ class: \board3\portal\modules\latest_members
+ arguments:
+ - @config
+ - @dbal.conn
+ - @template
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.leaders:
+ class: \board3\portal\modules\leaders
+ arguments:
+ - @auth
+ - @config
+ - @dbal.conn
+ - @template
+ - %core.root_path%
+ - %core.php_ext%
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.link_us:
+ class: \board3\portal\modules\link_us
+ arguments:
+ - @config
+ - @template
+ - @user
+ tags:
+ - { name: board3.module }
+
+ board3.module.links:
+ class: \board3\portal\modules\links
+ arguments:
+ - @config
+ - @dbal.conn
+ - @template
+ - %core.root_path%
+ - %core.php_ext%
+ - @user
+ tags:
+ - { name: board3.module }
+
board3.module.stylechanger:
class: \board3\portal\modules\stylechanger
arguments:
@@ -51,3 +190,17 @@ services:
- @user
tags:
- { name: board3.module }
+
+ board3.module.clock:
+ class: \board3\portal\modules\clock
+ tags:
+ - { name: board3.module }
+
+ board3.module.donation:
+ class: \board3\portal\modules\donation
+ arguments:
+ - @config
+ - @template
+ - @user
+ tags:
+ - { name: board3.module }
diff --git a/controller/main.php b/controller/main.php
index 9c64e6cf..ad95e553 100644
--- a/controller/main.php
+++ b/controller/main.php
@@ -115,7 +115,7 @@ class main
*
* @param \phpbb\di\service_collection $modules Board3 Modules service
* collection
- * @return void
+ * @return null
*/
protected function register_modules($modules)
{
diff --git a/develop/generate_migrations_data.php b/develop/generate_migrations_data.php
index 97c40da8..b8cfae19 100644
--- a/develop/generate_migrations_data.php
+++ b/develop/generate_migrations_data.php
@@ -13,6 +13,7 @@ define('IN_PHPBB', true);
define('B3_MODULE_ENABLED', 1);
define('GROUPS_TABLE', '$this->table_prefix . \'groups');
$phpbb_root_path = '../../../../';
+$root_path = '../'; // one directory down
include($phpbb_root_path . 'includes/startup.php');
$php_ex = substr(strrchr(__FILE__, '.'), 1);
$phpEx = $php_ex;
@@ -27,8 +28,14 @@ $phpbb_class_loader_ext->register();
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', $phpbb_root_path . 'phpbb/', "php");
$phpbb_class_loader->register();
+require($phpbb_root_path . 'includes/functions_content.' . $phpEx);
+require($phpbb_root_path . 'includes/functions_container.' . $phpEx);
+include($phpbb_root_path . 'includes/functions_compatibility.' . $phpEx);
+require($root_path . 'develop/phpbb_functions.' . $phpEx);
+// Set up container
+$phpbb_container = phpbb_create_default_container($phpbb_root_path, $phpEx);
+
$config_entry = $portal_config_entry = $db_data = array();
-$root_path = '../'; // one directory down
function set_config($name, $val)
{
@@ -46,7 +53,13 @@ function set_config($name, $val)
function handle_string(&$str)
{
- if (is_string($str))
+ if (is_string($str) && strpos($str, '$') === 0)
+ {
+ // @codingStandardsIgnoreStart
+ $str = str_replace(',', ' . \',\' . ', $str);
+ // @codingStandardsIgnoreEnd
+ }
+ else if (is_string($str))
{
$str = "'$str'";
}
@@ -109,14 +122,14 @@ board3_get_install_data($db, $root_path, $php_ex, $db_data);
echo 'set_config entries for migrations:
';
foreach ($config_entry as $name => $val)
{
- echo 'array(\'config.add\', array(\'' . $name . '\', ' . $val . ')),
';
+ echo ' array(\'config.add\', array(\'' . $name . '\', ' . $val . ')),
';
}
echo '';
echo '
set_portal_config entries for migrations:
';
foreach ($portal_config_entry as $name => $val)
{
- echo ' set_portal_config(\'' . $name . '\', ' . $val . ');
';
+ echo ' $this->set_portal_config(\'' . $name . '\', ' . $val . ');
';
}
echo '';
@@ -135,6 +148,8 @@ echo $db_data . '
';
*/
function board3_get_install_data($db, $root_path, $php_ex, &$db_data)
{
+ global $phpbb_container;
+
$directory = $root_path . 'portal/modules/';
$db_data = ' $board3_sql_query = array(
';
@@ -173,24 +188,34 @@ function board3_get_install_data($db, $root_path, $php_ex, &$db_data)
foreach ($modules_ary as $module_name => $module_data)
{
- $class_name = $module_name . '_module';
- if (!class_exists($class_name))
+ $new_module_name = '\\board3\\portal\\modules\\' . str_replace('portal_', '', $module_name);
+ if (class_exists($new_module_name))
{
- include($directory . $module_name . '.' . $php_ex);
+ $c_class = $phpbb_container->get('board3.module.' . str_replace('portal_', '', $module_name));
+ $module_name = $new_module_name;
}
- if (!class_exists($class_name))
+ else
{
- trigger_error('Class not found', E_USER_ERROR);
- }
+ $class_name = $module_name . '_module';
+ if (!class_exists($class_name))
+ {
+ include($directory . $module_name . '.' . $php_ex);
+ }
+ if (!class_exists($class_name))
+ {
+ trigger_error('Class not found: ' . $class_name, E_USER_ERROR);
+ }
- $c_class = new $class_name();
+ $c_class = new $class_name();
+ $module_name = substr($module_name, 7);
+ }
$sql_ary = array(
- 'module_classname' => substr($module_name, 7),
+ 'module_classname' => $module_name,
'module_column' => $module_data[0],
'module_order' => $module_data[1],
- 'module_name' => $c_class->get_name,
- 'module_image_src' => $c_class->get_image,
+ 'module_name' => $c_class->get_name(),
+ 'module_image_src' => $c_class->get_image(),
'module_group_ids' => '',
'module_image_width' => 16,
'module_image_height' => 16,
@@ -297,7 +322,7 @@ class db
}
}
$this->int_pointer++;
- return $ret;
+ return $this->preg_replace_value($ret);
}
}
}
@@ -306,4 +331,55 @@ class db
return false;
}
}
+
+ protected function preg_replace_value($value)
+ {
+ return preg_replace("/\{foobar\.group_id\.\s*([A-Z_]+?)\s*+\}/", "\$groups_ary['$1']", $value);
+ }
+}
+
+/**
+* Convert either 3.0 dbms or 3.1 db driver class name to 3.1 db driver class name.
+*
+* If $dbms is a valid 3.1 db driver class name, returns it unchanged.
+* Otherwise prepends phpbb\db\driver\ to the dbms to convert a 3.0 dbms
+* to 3.1 db driver class name.
+*
+* @param string $dbms dbms parameter
+* @return db driver class
+*/
+function phpbb_convert_30_dbms_to_31($dbms)
+{
+ // Note: this check is done first because mysqli extension
+ // supplies a mysqli class, and class_exists($dbms) would return
+ // true for mysqli class.
+ // However, per the docblock any valid 3.1 driver name should be
+ // recognized by this function, and have priority over 3.0 dbms.
+ if (class_exists('phpbb\db\driver\\' . $dbms))
+ {
+ return 'phpbb\db\driver\\' . $dbms;
+ }
+
+ if (class_exists($dbms))
+ {
+ // Additionally we could check that $dbms extends phpbb\db\driver\driver.
+ // http://php.net/manual/en/class.reflectionclass.php
+ // Beware of possible performance issues:
+ // http://stackoverflow.com/questions/294582/php-5-reflection-api-performance
+ // We could check for interface implementation in all paths or
+ // only when we do not prepend phpbb\db\driver\.
+
+ /*
+ $reflection = new \ReflectionClass($dbms);
+
+ if ($reflection->isSubclassOf('phpbb\db\driver\driver'))
+ {
+ return $dbms;
+ }
+ */
+
+ return $dbms;
+ }
+
+ throw new \RuntimeException("You have specified an invalid dbms driver: $dbms");
}
diff --git a/develop/phpbb_functions.php b/develop/phpbb_functions.php
new file mode 100644
index 00000000..15742147
--- /dev/null
+++ b/develop/phpbb_functions.php
@@ -0,0 +1,47 @@
+ 1,
),
array(
- 'module_classname' => 'stylechanger',
+ 'module_classname' => '\board3\portal\modules\stylechanger',
'module_column' => 1,
'module_order' => 2,
'module_name' => 'BOARD_STYLE',
@@ -325,7 +325,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'birthday_list',
+ 'module_classname' => '\board3\portal\modules\birthday_list',
'module_column' => 1,
'module_order' => 3,
'module_name' => 'BIRTHDAYS',
@@ -336,7 +336,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'clock',
+ 'module_classname' => '\board3\portal\modules\clock',
'module_column' => 1,
'module_order' => 4,
'module_name' => 'CLOCK',
@@ -358,7 +358,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'attachments',
+ 'module_classname' => '\board3\portal\modules\attachments',
'module_column' => 1,
'module_order' => 6,
'module_name' => 'PORTAL_ATTACHMENTS',
@@ -380,7 +380,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'latest_members',
+ 'module_classname' => '\board3\portal\modules\latest_members',
'module_column' => 1,
'module_order' => 8,
'module_name' => 'LATEST_MEMBERS',
@@ -391,7 +391,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'link_us',
+ 'module_classname' => '\board3\portal\modules\link_us',
'module_column' => 1,
'module_order' => 9,
'module_name' => 'LINK_US',
@@ -424,7 +424,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'announcements',
+ 'module_classname' => '\board3\portal\modules\announcements',
'module_column' => 2,
'module_order' => 3,
'module_name' => 'GLOBAL_ANNOUNCEMENTS',
@@ -490,7 +490,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'calendar',
+ 'module_classname' => '\board3\portal\modules\calendar',
'module_column' => 3,
'module_order' => 3,
'module_name' => 'PORTAL_CALENDAR',
@@ -501,7 +501,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'leaders',
+ 'module_classname' => '\board3\portal\modules\leaders',
'module_column' => 3,
'module_order' => 4,
'module_name' => 'THE_TEAM',
@@ -512,7 +512,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'latest_bots',
+ 'module_classname' => '\board3\portal\modules\latest_bots',
'module_column' => 3,
'module_order' => 5,
'module_name' => 'LATEST_BOTS',
@@ -523,7 +523,7 @@ class v210_beta1 extends \phpbb\db\migration\migration
'module_status' => 1,
),
array(
- 'module_classname' => 'links',
+ 'module_classname' => '\board3\portal\modules\links',
'module_column' => 3,
'module_order' => 6,
'module_name' => 'PORTAL_LINKS',
diff --git a/modules/announcements.php b/modules/announcements.php
new file mode 100644
index 00000000..395eeee7
--- /dev/null
+++ b/modules/announcements.php
@@ -0,0 +1,529 @@
+lang}/mods/portal/"
+ */
+ public $language = 'portal_announcements_module';
+
+ /** @var \phpbb\auth\auth */
+ protected $auth;
+
+ /** @var \phpbb\cache\driver */
+ protected $cache;
+
+ /** @var \phpbb\config\config */
+ protected $config;
+
+ /** @var \phpbb\template */
+ protected $template;
+
+ /** @var \phpbb\db\driver */
+ protected $db;
+
+ /** @var php file extension */
+ protected $php_ext;
+
+ /** @var phpbb root path */
+ protected $phpbb_root_path;
+
+ /** @var \phpbb\user */
+ protected $user;
+
+ /**
+ * Construct an announcements object
+ *
+ * @param \phpbb\auth\auth $auth phpBB auth service
+ * @param \phpbb\cache\driver $cache phpBB cache driver
+ * @param \phpbb\config\config $config phpBB config
+ * @param \phpbb\template $template phpBB template
+ * @param \phpbb\db\driver $db Database driver
+ * @param string $phpEx php file extension
+ * @param string $phpbb_root_path phpBB root path
+ * @param \phpbb\user $user phpBB user object
+ */
+ public function __construct($auth, $cache, $config, $template, $db, $phpEx, $phpbb_root_path, $user)
+ {
+ $this->auth = $auth;
+ $this->cache = $cache;
+ $this->config = $config;
+ $this->template = $template;
+ $this->db = $db;
+ $this->php_ext = $phpEx;
+ $this->phpbb_root_path = $phpbb_root_path;
+ $this->user = $user;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_template_center($module_id)
+ {
+ $announcement = request_var('announcement', -1);
+ $announcement = ($announcement > $this->config['board3_announcements_length_' . $module_id] -1) ? -1 : $announcement;
+ $start = request_var('ap', 0);
+ $start = ($start < 0) ? 0 : $start;
+
+ // Fetch announcements from portal/includes/functions.php with check if "read full" is requested.
+ $portal_announcement_length = ($announcement < 0) ? $this->config['board3_announcements_length_' . $module_id] : 0;
+ $fetch_news = phpbb_fetch_posts($module_id, $this->config['board3_global_announcements_forum_' . $module_id], $this->config['board3_announcements_permissions_' . $module_id], $this->config['board3_number_of_announcements_' . $module_id], $portal_announcement_length, $this->config['board3_announcements_day_' . $module_id], 'announcements', $start, $this->config['board3_announcements_forum_exclude_' . $module_id]);
+
+ // Any announcements present? If not terminate it here.
+ if (sizeof($fetch_news) == 0)
+ {
+ $this->template->assign_block_vars('announcements_center_row', array(
+ 'S_NO_TOPICS' => true,
+ 'S_NOT_LAST' => false
+ ));
+
+ $this->template->assign_var('S_CAN_READ', false);
+ }
+ else
+ {
+ // Count number of posts for announcements archive, considering if permission check is dis- or enabled.
+ if ($this->config['board3_announcements_archive_' . $module_id])
+ {
+ $permissions = $this->config['board3_announcements_permissions_' . $module_id];
+ $forum_from = $this->config['board3_global_announcements_forum_' . $module_id];
+ $forum_from = (strpos($forum_from, ',') !== false) ? explode(',', $forum_from) : (($forum_from != '') ? array($forum_from) : array());
+
+ $time = ($this->config['board3_announcements_day_' . $module_id] == 0) ? 0 : $this->config['board3_announcements_day_' . $module_id];
+ $post_time = ($time == 0) ? '' : 'AND topic_time > ' . (time() - $time * 86400);
+
+ $str_where = '';
+
+ if($permissions == true)
+ {
+ $disallow_access = array_unique(array_keys($this->auth->acl_getf('!f_read', true)));
+ }
+ else
+ {
+ $disallow_access = array();
+ }
+
+ if($this->config['board3_announcements_forum_exclude_' . $module_id] == true)
+ {
+ $disallow_access = array_merge($disallow_access, $forum_from);
+ $forum_from = 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)
+ {
+ $str_where .= 'forum_id = ' . (int) $acc_id . ' OR ';
+ if($global_f < 1 && $acc_id > 0)
+ {
+ $global_f = $acc_id;
+ }
+ }
+ }
+ else
+ {
+ foreach($disallow_access as $acc_id)
+ {
+ $str_where .= 'forum_id <> ' . (int) $acc_id . ' AND ';
+ }
+ }
+
+ $str_where = (strlen($str_where) > 0) ? 'AND (forum_id = 0 OR (' . trim(substr($str_where, 0, -4)) . '))' : '';
+
+ $sql = 'SELECT COUNT(topic_id) AS num_topics
+ FROM ' . TOPICS_TABLE . '
+ WHERE ((topic_type = ' . POST_GLOBAL . ')
+ OR topic_type = ' . POST_ANNOUNCE . ')
+ AND topic_visibility = 1
+ AND topic_moved_id = 0
+ ' . $post_time . '
+ ' . $str_where;
+ $result = $this->db->sql_query($sql);
+ $total_announcements = (int) $this->db->sql_fetchfield('num_topics');
+ $this->db->sql_freeresult($result);
+ }
+
+ $topic_tracking_info = (get_portal_tracking_info($fetch_news));
+
+ if($announcement < 0)
+ // Show the announcements overview
+ {
+ $count = $fetch_news['topic_count'];
+ for ($i = 0; $i < $count; $i++)
+ {
+ if(isset($fetch_news[$i]['striped']) && $fetch_news[$i]['striped'] == true)
+ {
+ $open_bracket = '[ ';
+ $close_bracket = ' ]';
+ $read_full = $this->user->lang['READ_FULL'];
+ }
+ else
+ {
+ $open_bracket = '';
+ $close_bracket = '';
+ $read_full = '';
+ }
+ // unread?
+ $forum_id = $fetch_news[$i]['forum_id'];
+ $topic_id = $fetch_news[$i]['topic_id'];
+ //$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id, $global_announce_list = false);
+ $unread_topic = (isset($topic_tracking_info[$topic_id]) && $fetch_news[$i]['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
+ $real_forum_id = ($forum_id == 0) ? $fetch_news['global_id']: $forum_id;
+ $read_full_url = (isset($_GET['ap'])) ? 'ap='. $start . '&announcement=' . $i . '#a' . $i : 'announcement=' . $i . '#a' . $i;
+ $view_topic_url = append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", 'f=' . (($fetch_news[$i]['forum_id']) ? $fetch_news[$i]['forum_id'] : $forum_id) . '&t=' . $topic_id);
+
+ if ($this->config['board3_announcements_archive_' . $module_id])
+ {
+ $pagination = generate_portal_pagination(append_sid("{$this->phpbb_root_path}app.{$this->php_ext}/portal"), $total_announcements, $this->config['board3_number_of_announcements_' . $module_id], $start, 'announcements');
+ }
+
+ $replies = ($this->auth->acl_get('m_approve', $forum_id)) ? $fetch_news[$i]['topic_replies_real'] : $fetch_news[$i]['topic_replies'];
+ $folder_img = $folder_alt = $topic_type = $folder = $folder_new = '';
+ switch ($fetch_news[$i]['topic_type'])
+ {
+ case POST_GLOBAL:
+ $folder = 'global_read';
+ $folder_new = 'global_unread';
+ break;
+ case POST_ANNOUNCE:
+ $folder = 'announce_read';
+ $folder_new = 'announce_unread';
+ break;
+ default:
+ $folder = 'topic_read';
+ $folder_new = 'topic_unread';
+ if ($this->config['hot_threshold'] && $replies >= $this->config['hot_threshold'] && $fetch_news[$i]['topic_status'] != ITEM_LOCKED)
+ {
+ $folder .= '_hot';
+ $folder_new .= '_hot';
+ }
+ break;
+ }
+
+ if ($fetch_news[$i]['topic_status'] == ITEM_LOCKED)
+ {
+ $folder .= '_locked';
+ $folder_new .= '_locked';
+ }
+ if ($fetch_news[$i]['topic_type'] == POST_GLOBAL)
+ {
+ $global_announce_list[$fetch_news[$i]['topic_id']] = true;
+ }
+ if ($fetch_news[$i]['topic_posted'])
+ {
+ $folder .= '_mine';
+ $folder_new .= '_mine';
+ }
+ $folder_img = ($unread_topic) ? $folder_new : $folder;
+ $folder_alt = ($unread_topic) ? 'NEW_POSTS' : (($fetch_news[$i]['topic_status'] == ITEM_LOCKED) ? 'TOPIC_LOCKED' : 'NO_NEW_POSTS');
+
+ // Grab icons
+ $icons = $this->cache->obtain_icons();
+
+ $this->template->assign_block_vars('announcements_center_row', array(
+ 'ATTACH_ICON_IMG' => ($fetch_news[$i]['attachment'] && $this->config['allow_attachments']) ? $this->user->img('icon_topic_attach', $this->user->lang['TOTAL_ATTACHMENTS']) : '',
+ 'FORUM_NAME' => ($forum_id) ? $fetch_news[$i]['forum_name'] : '',
+ 'TITLE' => $fetch_news[$i]['topic_title'],
+ 'POSTER' => $fetch_news[$i]['username'],
+ 'POSTER_FULL' => $fetch_news[$i]['username_full'],
+ 'USERNAME_FULL_LAST' => $fetch_news[$i]['username_full_last'],
+ 'U_USER_PROFILE' => (($fetch_news[$i]['user_type'] == USER_NORMAL || $fetch_news[$i]['user_type'] == USER_FOUNDER) && $fetch_news[$i]['user_id'] != ANONYMOUS) ? append_sid("{$this->phpbb_root_path}memberlist.{$this->php_ext}", 'mode=viewprofile&u=' . $fetch_news[$i]['user_id']) : '',
+ 'TIME' => $fetch_news[$i]['topic_time'],
+ 'LAST_POST_TIME' => $this->user->format_date($fetch_news[$i]['topic_last_post_time']),
+ 'TEXT' => $fetch_news[$i]['post_text'],
+ 'REPLIES' => $fetch_news[$i]['topic_replies'],
+ 'TOPIC_VIEWS' => $fetch_news[$i]['topic_views'],
+ 'A_ID' => $i,
+ 'TOPIC_FOLDER_IMG' => $this->user->img($folder_img, $folder_alt),
+ 'TOPIC_FOLDER_IMG_SRC' => $this->user->img($folder_img, $folder_alt, false, '', 'src'),
+ 'TOPIC_FOLDER_IMG_ALT' => $this->user->lang[$folder_alt],
+ 'FOLDER_IMG' => $this->user->img('topic_read', 'NO_NEW_POSTS'),
+ 'TOPIC_ICON_IMG' => (!empty($icons[$fetch_news[$i]['icon_id']])) ? $icons[$fetch_news[$i]['icon_id']]['img'] : '',
+ 'TOPIC_ICON_IMG_WIDTH' => (!empty($icons[$fetch_news[$i]['icon_id']])) ? $icons[$fetch_news[$i]['icon_id']]['width'] : '',
+ 'TOPIC_ICON_IMG_HEIGHT' => (!empty($icons[$fetch_news[$i]['icon_id']])) ? $icons[$fetch_news[$i]['icon_id']]['height'] : '',
+ 'U_VIEWFORUM' => append_sid("{$this->phpbb_root_path}viewforum.{$this->php_ext}", 'f=' . $fetch_news[$i]['forum_id']),
+ 'U_LAST_COMMENTS' => append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", (($real_forum_id) ? 'f=' . $real_forum_id . '&' : '') . 't=' . $topic_id . '&p=' . $fetch_news[$i]['topic_last_post_id'] . '#p' . $fetch_news[$i]['topic_last_post_id']),
+ 'U_VIEW_COMMENTS' => append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", (($real_forum_id) ? 'f=' . $real_forum_id . '&' : '') . 't=' . $topic_id),
+ 'U_VIEW_UNREAD' => append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", (($real_forum_id) ? 'f=' . $real_forum_id . '&' : '') . 't=' . $topic_id . '&view=unread#unread'),
+ 'U_POST_COMMENT' => append_sid("{$this->phpbb_root_path}posting.{$this->php_ext}", 'mode=reply&' . (($real_forum_id) ? 'f=' . $real_forum_id . '&' : '') . 't=' . $topic_id),
+ 'U_READ_FULL' => append_sid("{$this->phpbb_root_path}app.{$this->php_ext}/portal", $read_full_url),
+ 'L_READ_FULL' => $read_full,
+ 'OPEN' => $open_bracket,
+ 'CLOSE' => $close_bracket,
+ 'S_NOT_LAST' => ($i < sizeof($fetch_news) - 1) ? true : false,
+ 'S_POLL' => $fetch_news[$i]['poll'],
+ 'S_UNREAD_INFO' => $unread_topic,
+ 'S_HAS_ATTACHMENTS' => (!empty($fetch_news[$i]['attachments'])) ? true : false,
+ ));
+
+ phpbb_generate_template_pagination($this->template, $view_topic_url, 'announcements_center_row.pagination', 'start', $fetch_news[$i]['topic_replies'] + 1, $this->config['posts_per_page'], 1, true, true);
+
+
+ if(!empty($fetch_news[$i]['attachments']))
+ {
+ foreach ($fetch_news[$i]['attachments'] as $attachment)
+ {
+ $this->template->assign_block_vars('announcements_center_row.attachment', array(
+ 'DISPLAY_ATTACHMENT' => $attachment)
+ );
+ }
+ }
+ if ($this->config['board3_number_of_announcements_' . $module_id] != 0 && $this->config['board3_announcements_archive_' . $module_id])
+ {
+ $this->template->assign_vars(array(
+ 'AP_PAGINATION' => $pagination,
+ 'TOTAL_ANNOUNCEMENTS' => ($total_announcements == 1) ? $this->user->lang['VIEW_LATEST_ANNOUNCEMENT'] : sprintf($this->user->lang['VIEW_LATEST_ANNOUNCEMENTS'], $total_announcements),
+ 'AP_PAGE_NUMBER' => phpbb_on_page($this->template, $this->user, '', $total_announcements, $this->config['board3_number_of_announcements_' . $module_id], $start))
+ );
+ }
+ }
+ }
+ else
+ // Show "read full" page
+ {
+ $i = $announcement;
+
+ /**
+ * redirect to portal page if the specified announcement does not exist
+ * force #top anchor in order to get rid of the #a anchor
+ */
+ if (!isset($fetch_news[$i]))
+ {
+ redirect(append_sid($this->phpbb_root_path . 'app.' . $this->php_ext, '/portal#top'));
+ }
+
+ $forum_id = $fetch_news[$i]['forum_id'];
+ $topic_id = $fetch_news[$i]['topic_id'];
+ $topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id, $global_announce_list = false);
+ $unread_topic = (isset($topic_tracking_info[$topic_id]) && $fetch_news[$i]['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
+ $open_bracket = '[ ';
+ $close_bracket = ' ]';
+ $read_full = $this->user->lang['BACK'];
+ $real_forum_id = ($forum_id == 0) ? $fetch_news['global_id']: $forum_id;
+
+ $read_full_url = (isset($_GET['ap'])) ? append_sid("{$this->phpbb_root_path}app.{$this->php_ext}/portal", "ap=$start#a$i") : append_sid("{$this->phpbb_root_path}app.{$this->php_ext}/portal#a$i");
+ $view_topic_url = append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", 'f=' . (($fetch_news[$i]['forum_id']) ? $fetch_news[$i]['forum_id'] : $forum_id) . '&t=' . $topic_id);
+ if ($this->config['board3_announcements_archive_' . $module_id])
+ {
+ $pagination = generate_portal_pagination(append_sid("{$this->phpbb_root_path}app.{$this->php_ext}/portal"), $total_announcements, $this->config['board3_number_of_announcements_' . $module_id], $start, 'announcements');
+ }
+
+ $this->template->assign_block_vars('announcements_center_row', array(
+ 'ATTACH_ICON_IMG' => ($fetch_news[$i]['attachment'] && $this->config['allow_attachments']) ? $this->user->img('icon_topic_attach', $this->user->lang['TOTAL_ATTACHMENTS']) : '',
+ 'FORUM_NAME' => ($forum_id) ? $fetch_news[$i]['forum_name'] : '',
+ 'TITLE' => $fetch_news[$i]['topic_title'],
+ 'POSTER' => $fetch_news[$i]['username'],
+ 'POSTER_FULL' => $fetch_news[$i]['username_full'],
+ 'TIME' => $fetch_news[$i]['topic_time'],
+ 'TEXT' => $fetch_news[$i]['post_text'],
+ 'REPLIES' => $fetch_news[$i]['topic_replies'],
+ 'TOPIC_VIEWS' => $fetch_news[$i]['topic_views'],
+ 'A_ID' => $i,
+ 'U_VIEWFORUM' => append_sid("{$this->phpbb_root_path}viewforum.{$this->php_ext}", 'f=' . $fetch_news[$i]['forum_id']),
+ 'U_LAST_COMMENTS' => append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", (($real_forum_id) ? 'f=' . $real_forum_id . '&' : '') . 't=' . $topic_id . '&p=' . $fetch_news[$i]['topic_last_post_id'] . '#p' . $fetch_news[$i]['topic_last_post_id']),
+ 'U_VIEW_COMMENTS' => append_sid("{$this->phpbb_root_path}viewtopic.{$this->php_ext}", (($real_forum_id) ? 'f=' . $real_forum_id . '&' : '') . 't=' . $topic_id),
+ 'U_POST_COMMENT' => append_sid("{$this->phpbb_root_path}posting.{$this->php_ext}", 'mode=reply&' . (($real_forum_id) ? 'f=' . $real_forum_id . '&' : '') . 't=' . $topic_id),
+ 'S_POLL' => $fetch_news[$i]['poll'],
+ 'S_UNREAD_INFO' => $unread_topic,
+ 'U_READ_FULL' => $read_full_url,
+ 'L_READ_FULL' => $read_full,
+ 'OPEN' => $open_bracket,
+ 'CLOSE' => $close_bracket,
+ 'S_HAS_ATTACHMENTS' => (!empty($fetch_news[$i]['attachments'])) ? true : false,
+ ));
+
+ phpbb_generate_template_pagination($this->template, $view_topic_url, 'announcements_center_row.pagination', 'start', $fetch_news[$i]['topic_replies'] + 1, $this->config['posts_per_page'], 1, true, true);
+
+ if(!empty($fetch_news[$i]['attachments']))
+ {
+ foreach ($fetch_news[$i]['attachments'] as $attachment)
+ {
+ $this->template->assign_block_vars('announcements_center_row.attachment', array(
+ 'DISPLAY_ATTACHMENT' => $attachment)
+ );
+ }
+ }
+
+ if ($this->config['board3_number_of_announcements_' . $module_id] <> 0 && $this->config['board3_announcements_archive_' . $module_id])
+ {
+ $this->template->assign_vars(array(
+ 'AP_PAGINATION' => $pagination,
+ 'TOTAL_ANNOUNCEMENTS' => ($total_announcements == 1) ? $this->user->lang['VIEW_LATEST_ANNOUNCEMENT'] : sprintf($this->user->lang['VIEW_LATEST_ANNOUNCEMENTS'], $total_announcements),
+ 'AP_PAGE_NUMBER' => phpbb_on_page($this->template, $this->user, '', $total_announcements, $this->config['board3_number_of_announcements_' . $module_id], $start))
+ );
+ }
+ }
+ }
+
+ $topic_icons = false;
+ if(!empty($fetch_news['topic_icons']))
+ {
+ $topic_icons = true;
+ }
+
+ $this->template->assign_vars(array(
+ 'NEWEST_POST_IMG' => $this->user->img('icon_topic_newest', 'VIEW_NEWEST_POST'),
+ 'READ_POST_IMG' => $this->user->img('icon_topic_latest', 'VIEW_LATEST_POST'),
+ 'GOTO_PAGE_IMG' => $this->user->img('icon_post_target', 'GOTO_PAGE'),
+ 'S_DISPLAY_ANNOUNCEMENTS_RVS' => ($this->config['board3_show_announcements_replies_views_' . $module_id]) ? true : false,
+ 'S_TOPIC_ICONS' => $topic_icons,
+ ));
+
+ if ($this->config['board3_announcements_style_' . $module_id])
+ {
+ return 'announcements_center_compact.html';
+ }
+ else
+ {
+ return 'announcements_center.html';
+ }
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get_template_acp($module_id)
+ {
+ return array(
+ 'title' => 'ACP_PORTAL_ANNOUNCE_SETTINGS',
+ 'vars' => array(
+ 'legend1' => 'ACP_PORTAL_ANNOUNCE_SETTINGS',
+ 'board3_announcements_style_' . $module_id => array('lang' => 'PORTAL_ANNOUNCEMENTS_STYLE' , 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'board3_number_of_announcements_' . $module_id => array('lang' => 'PORTAL_NUMBER_OF_ANNOUNCEMENTS' , 'validate' => 'int', 'type' => 'text:3:3', 'explain' => true),
+ 'board3_announcements_day_' . $module_id => array('lang' => 'PORTAL_ANNOUNCEMENTS_DAY' , 'validate' => 'int', 'type' => 'text:3:3', 'explain' => true),
+ 'board3_announcements_length_' . $module_id => array('lang' => 'PORTAL_ANNOUNCEMENTS_LENGTH' , 'validate' => 'int', 'type' => 'text:3:3', 'explain' => true),
+ 'board3_global_announcements_forum_' . $module_id => array('lang' => 'PORTAL_GLOBAL_ANNOUNCEMENTS_FORUM' , 'validate' => 'string', 'type' => 'custom', 'explain' => true, 'method' => 'select_forums', 'submit' => 'store_selected_forums'),
+ 'board3_announcements_forum_exclude_' . $module_id => array('lang' => 'PORTAL_ANNOUNCEMENTS_FORUM_EXCLUDE', 'validate' => 'string', 'type' => 'radio:yes_no', 'explain' => true),
+ 'board3_announcements_archive_' . $module_id => array('lang' => 'PORTAL_ANNOUNCEMENTS_ARCHIVE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'board3_announcements_permissions_' . $module_id => array('lang' => 'PORTAL_ANNOUNCEMENTS_PERMISSIONS' , 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'board3_show_announcements_replies_views_' . $module_id => array('lang' => 'PORTAL_SHOW_REPLIES_VIEWS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ ),
+ );
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function install($module_id)
+ {
+ set_config('board3_announcements_style_' . $module_id, 0);
+ set_config('board3_number_of_announcements_' . $module_id, 1);
+ set_config('board3_announcements_day_' . $module_id, 0);
+ set_config('board3_announcements_length_' . $module_id, 200);
+ set_config('board3_global_announcements_forum_' . $module_id, '');
+ set_config('board3_announcements_forum_exclude_' . $module_id, 0);
+ set_config('board3_announcements_archive_' . $module_id, 1);
+ set_config('board3_announcements_permissions_' . $module_id, 1);
+ set_config('board3_show_announcements_replies_views_' . $module_id, 1);
+
+ return true;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function uninstall($module_id, $db)
+ {
+ $del_config = array(
+ 'board3_announcements_style_' . $module_id,
+ 'board3_number_of_announcements_' . $module_id,
+ 'board3_announcements_day_' . $module_id,
+ 'board3_announcements_length_' . $module_id,
+ 'board3_global_announcements_forum_' . $module_id,
+ 'board3_announcements_forum_exclude_' . $module_id,
+ 'board3_announcements_archive_' . $module_id,
+ 'board3_announcements_permissions_' . $module_id,
+ 'board3_show_announcements_replies_views_' . $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
+ *
+ * @param mixed $value Value of input
+ * @param string $key Key name
+ * @param int $module_id Module ID
+ *
+ * @return string Forum select box HTML
+ */
+ public function select_forums($value, $key, $module_id)
+ {
+ $forum_list = make_forum_select(false, false, true, true, true, false, true);
+
+ $selected = array();
+ if(isset($this->config[$key]) && strlen($this->config[$key]) > 0)
+ {
+ $selected = explode(',', $this->config[$key]);
+ }
+ // Build forum options
+ $s_forum_options = '
';
+
+ return $s_forum_options;
+
+ }
+
+ /**
+ * Store selected forums
+ *
+ * @param string $key Key name
+ * @param int $module_id Module ID
+ *
+ * @return null
+ */
+ public function store_selected_forums($key, $module_id)
+ {
+ // Get selected forums
+ $values = request_var($key, array(0 => ''));
+ $news = implode(',', $values);
+ set_config($key, $news);
+ }
+}
diff --git a/portal/modules/portal_attachments.php b/modules/attachments.php
similarity index 59%
rename from portal/modules/portal_attachments.php
rename to modules/attachments.php
index 1e2c0624..718dfdc3 100644
--- a/portal/modules/portal_attachments.php
+++ b/modules/attachments.php
@@ -1,24 +1,18 @@
auth = $auth;
+ $this->config = $config;
+ $this->template = $template;
+ $this->db = $db;
+ $this->php_ext = $phpEx;
+ $this->phpbb_root_path = $phpbb_root_path;
+ $this->user = $user;
+ }
+
+ /**
+ * @inheritdoc
+ */
public function get_template_center($module_id)
{
return $this->parse_template($module_id, 'center');
}
+ /**
+ * @inheritdoc
+ */
public function get_template_side($module_id)
{
return $this->parse_template($module_id, 'side');
}
+ /**
+ * @inheritdoc
+ */
public function get_template_acp($module_id)
{
return array(
@@ -74,7 +120,7 @@ class portal_attachments_module extends \board3\portal\modules\module_base
}
/**
- * API functions
+ * @inheritdoc
*/
public function install($module_id)
{
@@ -87,10 +133,11 @@ class portal_attachments_module extends \board3\portal\modules\module_base
return true;
}
- public function uninstall($module_id)
+ /**
+ * @inheritdoc
+ */
+ public function uninstall($module_id, $db)
{
- global $db;
-
$del_config = array(
'board3_attachments_number_' . $module_id,
'board3_attach_max_length_' . $module_id,
@@ -104,26 +151,32 @@ class portal_attachments_module extends \board3\portal\modules\module_base
return $db->sql_query($sql);
}
- // Create select box for attachment filetype
+ /**
+ * Create select box for attachment filetype
+ *
+ * @param mixed $value Value of input
+ * @param string $key Key name
+ * @param int $module_id Module ID
+ *
+ * @return string Forum select box HTML
+ */
public function select_filetype($value, $key, $module_id)
{
- global $db, $user, $config;
-
// Get extensions
$sql = 'SELECT *
FROM ' . EXTENSIONS_TABLE . '
ORDER BY extension ASC';
- $result = $db->sql_query($sql);
+ $result = $this->db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
+ while ($row = $this->db->sql_fetchrow($result))
{
$extensions[] = $row;
}
$selected = array();
- if(isset($config['board3_attachments_filetype_' . $module_id]) && strlen($config['board3_attachments_filetype_' . $module_id]) > 0)
+ if(isset($this->config['board3_attachments_filetype_' . $module_id]) && strlen($this->config['board3_attachments_filetype_' . $module_id]) > 0)
{
- $selected = explode(',', $config['board3_attachments_filetype_' . $module_id]);
+ $selected = explode(',', $this->config['board3_attachments_filetype_' . $module_id]);
}
// Build options
@@ -137,11 +190,16 @@ class portal_attachments_module extends \board3\portal\modules\module_base
return $ext_options;
}
- // Store selected filetypes
+ /**
+ * Store selected filetypes
+ *
+ * @param string $key Key name
+ * @param int $module_id Module ID
+ *
+ * @return null
+ */
public function store_filetypes($key, $module_id)
{
- global $db, $cache;
-
// Get selected extensions
$values = request_var($key, array(0 => ''));
@@ -151,17 +209,23 @@ class portal_attachments_module extends \board3\portal\modules\module_base
}
- // Create forum select box
+ /**
+ * Create forum select box
+ *
+ * @param mixed $value Value of input
+ * @param string $key Key name
+ * @param int $module_id Module ID
+ *
+ * @return string Forum select box HTML
+ */
public function select_forums($value, $key)
{
- 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)
+ if(isset($this->config[$key]) && strlen($this->config[$key]) > 0)
{
- $selected = explode(',', $config[$key]);
+ $selected = explode(',', $this->config[$key]);
}
// Build forum options
$s_forum_options = '
-{$C_BLOCK_F_L}{$C_BLOCK_F_R}
\ No newline at end of file
+{$C_BLOCK_F_L}{$C_BLOCK_F_R}
diff --git a/styles/prosilver/template/portal/modules/attachments_side.html b/styles/prosilver/template/portal/modules/attachments_side.html
index af279bf4..39efdc8c 100644
--- a/styles/prosilver/template/portal/modules/attachments_side.html
+++ b/styles/prosilver/template/portal/modules/attachments_side.html
@@ -2,12 +2,12 @@