<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="modx.prosilver.en.xsl"?>
<!--NOTICE: Please open this file in your web browser. If presented with a security warning, you may safely tell it to allow the blocked content.-->
<!--For security purposes, please check: http://www.phpbb.com/mods/ for the latest version of this MOD.\nAlthough MODs are checked before being allowed in the MODs Database there is no guarantee that there are no security problems within the MOD.\nNo support will be given for MODs not found within the MODs Database which can be found at http://www.phpbb.com/mods/-->
<mod xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.phpbb.com/mods/xml/modx-1.2.5.xsd">
	<header>
		<meta name="generator" content="MODX file generated with PP MODX Creator by tumba25 (online version)"/>
		<license><![CDATA[http://opensource.org/licenses/gpl-license.php GNU General Public License v2]]></license>
		<title lang="en"><![CDATA[RAnon forum (Anonymous forum)]]></title>
		<description lang="en"><![CDATA[You can create anonymous forum for registered users on your board.]]></description>
		<description lang="ru"><![CDATA[Даёт возможность создать на конференции специальный форум, в котором зарегистрированные пользователи могут оставлять анонимные сообщения.]]></description>
		<author-group>
			<author>
				<realname><![CDATA[Dmitry]]></realname>
				<username><![CDATA[Mitirus]]></username>
				<homepage><![CDATA[http://mitblog.ru]]></homepage>
			</author>
		</author-group>
		<mod-version>1.0.2</mod-version>
		<installation>
			<level>intermediate</level>
			<time>900</time>
			<target-version>3.0.7-PL1</target-version>
		</installation>
		<link-group>
			<link type="contrib" href="./contrib/update_0_1a_to_1_0_0.xml" lang="en">Update 0.1a to 1.0.0</link>
			<link type="contrib" href="./contrib/update_1_0_0_to_1_0_1.xml" lang="en">Update 1.0.0 to 1.0.1</link>
			<link type="contrib" href="./contrib/update_1_0_1_to_1_0_2.xml" lang="en">Update 1.0.1 to 1.0.2</link>
			<link type="language" href="./contrib/ru.xml" lang="en">Russian</link>
		</link-group>
	</header>
	<action-group>
		<sql><![CDATA[INSERT INTO `phpbb_acl_options` (auth_option, is_global, is_local, founder_only) VALUES ('f_ranon_view', 0, 1, 0);]]></sql>
		<sql><![CDATA[ALTER TABLE `phpbb_forums` ADD `forum_ranon_flags` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;]]></sql>
		<sql><![CDATA[ALTER TABLE `phpbb_posts` ADD `ranon_poster_id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;]]></sql>
		<open src="posting.php">
			<edit>
				<find><![CDATA[$message_parser->get_submitted_attachment_data($post_data['poster_id']);]]></find>
				<action type="replace-with"><![CDATA[$message_parser->get_submitted_attachment_data((int) $user->data['user_id']);]]></action>
			</edit>
			<edit>
				<find><![CDATA[				'post_approved'			=> (isset($post_data['post_approved'])) ? $post_data['post_approved'] : false,]]></find>
				<action type="after-add"><![CDATA[				'forum_ranon_flags'		=> (isset($post_data['forum_ranon_flags'])) ? $post_data['forum_ranon_flags'] : 0,]]></action>
			</edit>
			<edit>
				<find><![CDATA[	'S_DISPLAY_USERNAME'		=> (!$user->data['is_registered'] || ($mode == 'edit' && $post_data['poster_id'] == ANONYMOUS)) ? true : false,]]></find>
				<action type="replace-with"><![CDATA[	'S_DISPLAY_USERNAME'		=> (!$user->data['is_registered'] || ($mode == 'edit' && $post_data['poster_id'] == ANONYMOUS) || (isset($post_data['forum_ranon_flags']) && ($post_data['forum_ranon_flags'] & FORUM_RANON_FLAG_ENABLE))) ? true : false,]]></action>
			</edit>
		</open>
		<open src="viewtopic.php">
			<edit>
				<find><![CDATA[	'SELECT'	=> 'u.*, z.friend, z.foe, p.*',]]></find>
				<action type="replace-with"><![CDATA[	'SELECT'	=> 'u.*, z.friend, z.foe, p.*, u2.username as ranon_username, u2.user_colour as ranon_user_colour',]]></action>
			</edit>
			<edit>
				<find><![CDATA[			'ON'	=> 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id'
		)]]></find>
				<action type="after-add"><![CDATA[		,
		array(
			'FROM'	=> array(USERS_TABLE => 'u2'),
			'ON'	=> 'u2.user_id = p.ranon_poster_id'
		)]]></action>
			</edit>
			<edit>
				<find><![CDATA[		'foe'				=> $row['foe'],]]></find>
				<action type="after-add"><![CDATA[		'ranon_poster_id'	=> $row['ranon_poster_id'],
		'ranon_username'	=> $row['ranon_username'],
		'ranon_user_colour'	=> $row['ranon_user_colour'],]]></action>
			</edit>
			<edit>
				<find><![CDATA[		'POST_AUTHOR_FULL'		=> ($poster_id != ANONYMOUS) ? $user_cache[$poster_id]['author_full'] : get_username_string('full', $poster_id, $row['username'], $row['user_colour'], $row['post_username']),]]></find>
				<action type="after-add"><![CDATA[		'POST_AUTHOR_RANON'		=> ($poster_id == ANONYMOUS && $auth->acl_get('f_ranon_view', $forum_id)) ? get_username_string('full', $row['ranon_poster_id'], $row['ranon_username'], $row['ranon_user_colour']) : '',]]></action>
			</edit>
		</open>
		<open src="adm/style/acp_forums.html">
			<edit>
				<find><![CDATA[			<dd><input type="text" id="topics_per_page" name="topics_per_page" value="{TOPICS_PER_PAGE}" size="4" maxlength="4" /></dd>
		</dl>]]></find>
				<action type="after-add"><![CDATA[		<dl>
			<dt><label for="ranon_anonymous_forum">{L_RANON_ANONYMOUS_FORUM}:</label><br /><span>{L_RANON_ANONYMOUS_FORUM_EXPLAIN}</span></dt>
			<dd><label><input type="radio" class="radio" name="ranon_anonymous_forum" value="1"<!-- IF S_RANON_ANONYMOUS_FORUM --> id="ranon_anonymous_forum" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
				<label><input type="radio" class="radio" name="ranon_anonymous_forum" value="0"<!-- IF not S_RANON_ANONYMOUS_FORUM --> id="ranon_anonymous_forum" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
		</dl>
		<dl>
			<dt><label for="ranon_personal_info">{L_RANON_PERSONAL_INFO}:</label><br /><span>{L_RANON_PERSONAL_INFO_EXPLAIN}</span></dt>
			<dd><label><input type="radio" class="radio" name="ranon_personal_info" value="1"<!-- IF S_RANON_PERSONAL_INFO --> id="ranon_personal_info" checked="checked"<!-- ENDIF --> /> {L_RANON_PERSONAL_INFO_NOT_SAVE}</label>
				<label><input type="radio" class="radio" name="ranon_personal_info" value="0"<!-- IF not S_RANON_PERSONAL_INFO --> id="ranon_personal_info" checked="checked"<!-- ENDIF --> /> {L_RANON_PERSONAL_INFO_HIDE}</label></dd>
		</dl>
		<dl>
			<dt><label for="ranon_match_profile">{L_RANON_MATCH_PROFILE}:</label><br /><span>{L_RANON_MATCH_PROFILE_EXPLAIN}</span></dt>
			<dd><label><input type="radio" class="radio" name="ranon_match_profile" value="1"<!-- IF S_RANON_MATCH_PROFILE --> id="ranon_match_profile" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
				<label><input type="radio" class="radio" name="ranon_match_profile" value="0"<!-- IF not S_RANON_MATCH_PROFILE --> id="ranon_match_profile" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
		</dl>]]></action>
			</edit>
		</open>
		<open src="includes/constants.php">
			<edit>
				<find><![CDATA[// Optional text flags]]></find>
				<action type="before-add"><![CDATA[// RAnon forum flags
define('FORUM_RANON_FLAG_ENABLE', 1);
define('FORUM_RANON_FLAG_NOT_SAVE', 2);
define('FORUM_RANON_FLAG_MATCH_PROFILE', 4);]]></action>
			</edit>
		</open>
		<open src="includes/functions_posting.php">
			<edit>
				<find><![CDATA[	// Collect Information]]></find>
				<action type="before-add"><![CDATA[	if ($mode != 'edit')
	{
		$data['poster_id'] = ANONYMOUS;
		$post_username = $username2 = $username;
		if (!($data['forum_ranon_flags'] & FORUM_RANON_FLAG_ENABLE) || (($data['forum_ranon_flags'] & FORUM_RANON_FLAG_MATCH_PROFILE) && $username == $user->data['username']))
		{
			$data['poster_ip'] = $user->ip;
			$data['poster_id'] = $data['ranon_poster_id'] = (int) $user->data['user_id'];
			$data['ranon_poster_id'] = (int) $user->data['user_id'];
			$username = (!$user->data['is_registered']) ? $username : '';
			$username2 = (!$user->data['is_registered'] && $username) ? $username : (($user->data['user_id'] != ANONYMOUS) ? $user->data['username'] : '');
		}
		else if (($data['forum_ranon_flags'] & FORUM_RANON_FLAG_ENABLE) && ($data['forum_ranon_flags'] & FORUM_RANON_FLAG_NOT_SAVE))
		{
			$data['poster_ip'] = '0.0.0.0';
			$data['ranon_poster_id'] = 0;
		}
		else
		{
			$data['poster_ip'] = $user->ip;
			$data['ranon_poster_id'] = (int) $user->data['user_id'];
		}
	}]]></action>
			</edit>
			<edit>
				<find><![CDATA[				'poster_id'			=> (int) $user->data['user_id'],]]></find>
				<action type="replace-with"><![CDATA[				'poster_id'			=> $data['poster_id'],
				'ranon_poster_id'	=> isset($data['ranon_poster_id']) ? $data['ranon_poster_id'] : 0,]]></action>
			</edit>
			<edit>
				<find><![CDATA[				'poster_ip'			=> $user->ip,]]></find>
				<action type="replace-with"><![CDATA[				'poster_ip'			=> $data['poster_ip'],]]></action>
			</edit>
			<edit>
				<find><![CDATA[				'post_username'		=> (!$user->data['is_registered']) ? $username : '',]]></find>
				<action type="replace-with"><![CDATA[				'post_username'		=> $username,]]></action>
			</edit>
			<edit>
				<find><![CDATA[				'topic_poster'				=> (int) $user->data['user_id'],]]></find>
				<action type="replace-with"><![CDATA[				'topic_poster'				=> $data['poster_id'],]]></action>
			</edit>
			<edit>
				<find><![CDATA[				'topic_first_poster_name'	=> (!$user->data['is_registered'] && $username) ? $username : (($user->data['user_id'] != ANONYMOUS) ? $user->data['username'] : ''),
				'topic_first_poster_colour'	=> $user->data['user_colour'],]]></find>
				<action type="replace-with"><![CDATA[				'topic_first_poster_name'	=> $username2,
				'topic_first_poster_colour'	=> ($data['poster_id'] != ANONYMOUS) ? $user->data['user_colour'] : '',]]></action>
			</edit>
			<edit>
				<find><![CDATA[				'topic_last_poster_id'		=> (int) $user->data['user_id'],
				'topic_last_poster_name'	=> (!$user->data['is_registered'] && $username) ? $username : (($user->data['user_id'] != ANONYMOUS) ? $user->data['username'] : ''),
				'topic_last_poster_colour'	=> $user->data['user_colour'],]]></find>
				<action type="replace-with"><![CDATA[				'topic_last_poster_id'		=> $data['poster_id'],
				'topic_last_poster_name'	=> $username2,
				'topic_last_poster_colour'	=> ($data['poster_id'] != ANONYMOUS) ? $user->data['user_colour'] : '',]]></action>
			</edit>
			<edit>
				<find><![CDATA[			$sql_data[FORUMS_TABLE]['stat'][] = 'forum_last_poster_id = ' . (int) $user->data['user_id'];
			$sql_data[FORUMS_TABLE]['stat'][] = "forum_last_poster_name = '" . $db->sql_escape((!$user->data['is_registered'] && $username) ? $username : (($user->data['user_id'] != ANONYMOUS) ? $user->data['username'] : '')) . "'";
			$sql_data[FORUMS_TABLE]['stat'][] = "forum_last_poster_colour = '" . $db->sql_escape($user->data['user_colour']) . "'";]]></find>
				<action type="replace-with"><![CDATA[			$sql_data[FORUMS_TABLE]['stat'][] = 'forum_last_poster_id = ' . $data['poster_id'];
			$sql_data[FORUMS_TABLE]['stat'][] = "forum_last_poster_name = '" . $db->sql_escape($username2) . "'";
			$sql_data[FORUMS_TABLE]['stat'][] = "forum_last_poster_colour = '" . (($data['poster_id'] != ANONYMOUS) ? $db->sql_escape($user->data['user_colour']) : '') . "'";]]></action>
			</edit>
			<edit>
				<find><![CDATA[						$sql_data[FORUMS_TABLE]['stat'][] = "forum_last_poster_name = '" . $db->sql_escape(($row['poster_id'] == ANONYMOUS) ? $row['post_username'] : $row['username']) . "'";]]></find>
				<action type="replace-with"><![CDATA[						$sql_data[FORUMS_TABLE]['stat'][] = "forum_last_poster_name = '" . $db->sql_escape($post_username) . "'";]]></action>
			</edit>
			<edit>
				<find><![CDATA[			$sql_data[TOPICS_TABLE]['stat'][] = 'topic_last_poster_id = ' . (int) $user->data['user_id'];
			$sql_data[TOPICS_TABLE]['stat'][] = "topic_last_poster_name = '" . $db->sql_escape((!$user->data['is_registered'] && $username) ? $username : (($user->data['user_id'] != ANONYMOUS) ? $user->data['username'] : '')) . "'";
			$sql_data[TOPICS_TABLE]['stat'][] = "topic_last_poster_colour = '" . (($user->data['user_id'] != ANONYMOUS) ? $db->sql_escape($user->data['user_colour']) : '') . "'";]]></find>
				<action type="replace-with"><![CDATA[			$sql_data[TOPICS_TABLE]['stat'][] = 'topic_last_poster_id = ' . $data['poster_id'];
			$sql_data[TOPICS_TABLE]['stat'][] = "topic_last_poster_name = '" . $db->sql_escape($username2) . "'";
			$sql_data[TOPICS_TABLE]['stat'][] = "topic_last_poster_colour = '" . (($data['poster_id'] != ANONYMOUS) ? $db->sql_escape($user->data['user_colour']) : '') . "'";]]></action>
			</edit>
		</open>
		<open src="includes/session.php">
			<edit>
				<find><![CDATA[			'forum'				=> (isset($_REQUEST['f']) && $_REQUEST['f'] > 0) ? (int) $_REQUEST['f'] : 0,
		);]]></find>
				<action type="after-add"><![CDATA[		if ($page_array['forum'] > 0)
		{
			global $db;
			
			$sql = 'SELECT forum_ranon_flags FROM ' . FORUMS_TABLE . ' WHERE forum_id = ' . (int)$page_array['forum'];
			$result = $db->sql_query($sql);
			$forum_ranon_flags = (int)$db->sql_fetchfield('forum_ranon_flags');
			$db->sql_freeresult($result);
			if (!empty($forum_ranon_flags) && $forum_ranon_flags && ($forum_ranon_flags & FORUM_RANON_FLAG_ENABLE))
			{				
				$page_array['page_name'] = '';
				$page_array['page_dir'] = '';
				
				$page_array['query_string'] = '';
				$page_array['script_path'] = '';
				$page_array['root_script_path'] = '';
				
				$page_array['forum'] = 0;
				
				$page_array['forum_ranon_flags'] = $forum_ranon_flags;
			}
		}]]></action>
			</edit>
			<edit>
				<find><![CDATA[		$this->page					= $this->extract_current_page($phpbb_root_path);]]></find>
				<action type="after-add"><![CDATA[		if (!empty($this->page['forum_ranon_flags']) && $this->page['forum_ranon_flags'] & FORUM_RANON_FLAG_ENABLE)
		{
			$this->update_session_page = $update_session_page = false;
		}]]></action>
			</edit>
		</open>
		<open src="includes/acp/acp_forums.php">
			<edit>
				<find><![CDATA[						'forum_password_unset'	=> request_var('forum_password_unset', false),]]></find>
				<action type="after-add"><![CDATA[						'forum_ranon_flags'		=> (request_var('ranon_anonymous_forum', false) ? FORUM_RANON_FLAG_ENABLE : 0) + (request_var('ranon_personal_info', false) ? FORUM_RANON_FLAG_NOT_SAVE : 0) + (request_var('ranon_match_profile', false) ? FORUM_RANON_FLAG_MATCH_PROFILE : 0),]]></action>
			</edit>
			<edit>
				<find><![CDATA[							'forum_password_confirm'=> '',]]></find>
				<action type="after-add"><![CDATA[							'forum_ranon_flags'		=> 0,]]></action>
			</edit>
			<edit>
				<find><![CDATA[					'S_ENABLE_QUICK_REPLY'		=> ($forum_data['forum_flags'] & FORUM_FLAG_QUICK_REPLY) ? true : false,]]></find>
				<action type="after-add"><![CDATA[					'S_RANON_ANONYMOUS_FORUM'	=> ($forum_data['forum_ranon_flags'] & FORUM_RANON_FLAG_ENABLE) ? true : false,
					'S_RANON_PERSONAL_INFO'		=> ($forum_data['forum_ranon_flags'] & FORUM_RANON_FLAG_NOT_SAVE) ? true : false,
					'S_RANON_MATCH_PROFILE'		=> ($forum_data['forum_ranon_flags'] & FORUM_RANON_FLAG_MATCH_PROFILE) ? true : false,]]></action>
			</edit>
		</open>
		<open src="language/en/acp/forums.php">
			<edit>
				<find><![CDATA[$lang = array_merge($lang, array(]]></find>
				<action type="after-add"><![CDATA[	'RANON_ANONYMOUS_FORUM'			=> 'Anonymous forum',
	'RANON_ANONYMOUS_FORUM_EXPLAIN'	=> 'Select «Yes» to provide an ability for posting messages with any username',
	'RANON_PERSONAL_INFO'			=> 'Private data',
	'RANON_PERSONAL_INFO_EXPLAIN'	=> 'If the «Hide» is selected then user\'s information will be saved in database, but will be accesible for administration only. Otherwise the information will not be saved',
	'RANON_PERSONAL_INFO_HIDE'		=> 'Hide',
	'RANON_PERSONAL_INFO_NOT_SAVE'	=> 'Do not save',
	'RANON_MATCH_PROFILE'			=> "Leave ability for posting with user's registered nickname",
	'RANON_MATCH_PROFILE_EXPLAIN'	=> "In case of the user's registered nickname input, the message will be posted from the user's registered name correspondingnly, but not from the «guest»",]]></action>
			</edit>
		</open>
		<open src="language/en/acp/permissions_phpbb.php">
			<edit>
				<find><![CDATA[	'acl_f_noapprove'	=> array('lang' => 'Can post without approval', 'cat' => 'misc'),]]></find>
				<action type="after-add"><![CDATA[	'acl_f_ranon_view'	=> array('lang' => 'Can see authors\' nicknames in anonymous forums', 'cat' => 'misc'),]]></action>
			</edit>
		</open>
		<open src="styles/prosilver/template/viewtopic_body.html">
			<edit>
				<find><![CDATA[				<!-- IF not postrow.U_POST_AUTHOR --><strong>{postrow.POST_AUTHOR_FULL}</strong><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF -->]]></find>
				<action type="after-add"><![CDATA[				<!-- IF postrow.POST_AUTHOR_RANON --> ({postrow.POST_AUTHOR_RANON})<!-- ENDIF -->]]></action>
			</edit>
		</open>
		<open src="styles/subsilver2/template/viewtopic_body.html">
			<edit>
				<find><![CDATA[				<b class="postauthor"<!-- IF postrow.POST_AUTHOR_COLOUR --> style="color: {postrow.POST_AUTHOR_COLOUR}"<!-- ENDIF -->>{postrow.POST_AUTHOR}</b>]]></find>
				<action type="after-add"><![CDATA[				<!-- IF postrow.POST_AUTHOR_RANON --> ({postrow.POST_AUTHOR_RANON})<!-- ENDIF -->]]></action>
			</edit>
		</open>
	</action-group>
</mod>
