changeset 34:b42dcaaed003

* Update to use UMIL and to try to resolve rejection issues for v1.4.1 no-open-ticket
author IBBoard <dev@ibboard.co.uk>
date Sat, 04 Dec 2010 20:11:27 +0000
parents 536903c5733c
children 8a20d22459a3
files install.xml root/install/install_MultiRaceRankThemesPermissions.php root/install_multirace_rank_themes.php root/styles/prosilver/template/memberlist_ranks.html root/styles/subsilver2/template/memberlist_ranks.html root/umil/error_files/.htaccess root/umil/error_files/index.htm root/umil/file.php root/umil/index.htm root/umil/language/ar/umil.php root/umil/language/da/umil.php root/umil/language/de/umil.php root/umil/language/de_x_sie/umil.php root/umil/language/en/umil.php root/umil/language/es/umil.php root/umil/language/fr/umil.php root/umil/language/fr_x_tu/umil.php root/umil/language/he/umil.php root/umil/language/hr/umil.php root/umil/language/hu/umil.php root/umil/language/index.htm root/umil/language/it/umil.php root/umil/language/ja/umil.php root/umil/language/nl-x-formal/umil.php root/umil/language/nl/umil.php root/umil/language/pl/umil.php root/umil/language/pt_br/umil.php root/umil/language/ro/umil.php root/umil/language/ru/umil.php root/umil/language/sk/umil.php root/umil/language/sv/umil.php root/umil/language/tr/umil.php root/umil/language/zh_cmn_hant/umil.php root/umil/style/confirm_body.html root/umil/style/index.htm root/umil/style/index_body.html root/umil/style/message_body.html root/umil/style/overall_footer.html root/umil/style/overall_header.html root/umil/style/parse.css root/umil/style/style.css root/umil/umil.php root/umil/umil_auto.php root/umil/umil_frontend.php subsilver2.xml
diffstat 45 files changed, 9245 insertions(+), 84 deletions(-) [+]
line wrap: on
line diff
--- a/install.xml	Mon Aug 02 19:30:31 2010 +0000
+++ b/install.xml	Sat Dec 04 20:11:27 2010 +0000
@@ -43,14 +43,24 @@
 			<link type="template" href="subsilver2.xml" lang="en-gb">subsilver2</link>
 			<link type="contrib" href="contrib/Upgrade-1.2.4.xml" lang="en-gb">Upgrade instructions from v1.2.4</link>
 		</link-group>
-		<mod-version>1.4.1</mod-version>
+		<mod-version>1.4.2</mod-version>
 		<installation>
 			<level>intermediate</level>
 			<time>3600</time>
-			<target-version>3.0.7</target-version>
+			<target-version>3.0.8</target-version>
 		</installation>
 		<history>
 			<entry>
+				<date>2010-12-04</date>
+				<rev-version>1.4.2</rev-version>
+				<changelog lang="en-gb">
+					<change>Change to UMIL for permissions and SQL changes - phpBB won't validate the MOD without it, even if the old method works and was once the only way to do it</change>
+					<change>Fix: Make sure that $s_rank_theme_options is initialised in admin section</change>
+					<change>Fix: Tidy up templates for rank theme list</change>
+					<change>Fix: Add missing lang string for empty rank themes</change>
+				</changelog>
+			</entry>
+			<entry>
 				<date>2010-08-02</date>
 				<rev-version>1.4.1</rev-version>
 				<changelog lang="en-gb">
@@ -288,25 +298,8 @@
 		</history>
 	</header>
 	<action-group>
-	    <sql><![CDATA[ALTER TABLE phpbb_users ADD user_rank_theme INT DEFAULT 1 NOT NULL ;
-ALTER TABLE phpbb_ranks ADD rank_theme INT DEFAULT 1 NOT NULL ;
-
-UPDATE phpbb_ranks SET rank_theme = -1 WHERE rank_special = 1;
-
-CREATE TABLE phpbb_rank_themes (
-  rtheme_id smallint(5) NOT NULL auto_increment,
-  rtheme_title varchar(50) default NULL,
-  rtheme_public tinyint(1) default '0',
-  PRIMARY KEY  (rtheme_id)
-) CHARSET=utf8 COLLATE=utf8_bin;
-
-INSERT INTO phpbb_rank_themes VALUES (-1, 'Special', 0);
-INSERT INTO phpbb_rank_themes VALUES (1, 'Default', 1);]]></sql>
 		<copy>
-			<file from="root/styles/prosilver/template/memberlist_ranks.html" to="styles/prosilver/template/memberlist_ranks.html" />
-			<file from="root/styles/prosilver/theme/images/icon_ranks.gif" to="styles/prosilver/theme/images/icon_ranks.gif" />
-			<file from="root/install/install_MultiRaceRankThemes.php" to="install/install_MultiRaceRankThemes.php" />
-			<file from="root/language/en/mods/permissions_MultiRaceRankThemes.php" to="language/en/mods/permissions_MultiRaceRankThemes.php" />
+			<file from="root/*.*" to="*.*" />
 		</copy>
 		<open src="adm/style/acp_ranks.html">
 			<edit>
@@ -705,6 +698,7 @@
 
 				$result = $db->sql_query($sql);
 				$valid_selection = false;
+				$s_rank_theme_options = '';
 
 				while ($row = $db->sql_fetchrow($result))
 				{
@@ -1048,7 +1042,8 @@
 	'RANK_NAME'		=> 'Rank',
 	'RANK_IMG'		=> 'Rank image',
 	'RANK_POSTS'		=> 'Required post count',
-	'NO_RANKSET_ERROR'	=> 'The rank theme you selected was invalid. Please check the link and try again.'
+	'NO_RANKSET_ERROR'	=> 'The rank theme you selected was invalid. Please check the link and try again.',
+	'NO_RANKS'			=> 'The rank theme you selected does not currently contain any ranks.',
 ]]></action>
 			</edit>
 		</open>
@@ -1233,6 +1228,20 @@
 				<action type="after-add"><![CDATA[.icon-ranks					{ background-image: url("{T_THEME_PATH}/images/icon_ranks.gif"); }]]></action>
 			</edit>
 		</open>
+		<open src="styles/prosilver/theme/content.css">
+			<edit>
+				<find><![CDATA[dl.faq {]]></find>
+				<action type="before-add"><![CDATA[dl.rankthemes, ]]></action>
+			</edit>
+			<edit>
+				<find><![CDATA[dl.faq dt {]]></find>
+				<action type="before-add"><![CDATA[dl.rankthemes dt, ]]></action>
+			</edit>
+			<edit>
+				<find><![CDATA[.content dl.faq {]]></find>
+				<action type="before-add"><![CDATA[.content dl.rankthemes, ]]></action>
+			</edit>
+		</open>
 		<open src="viewtopic.php">
 			<edit>
 				<find><![CDATA[			get_user_rank($row['user_rank'], $row['user_posts'], $user_cache[$poster_id]['rank_title'], $user_cache[$poster_id]['rank_image'], $user_cache[$poster_id]['rank_image_src']);]]></find>
@@ -1242,14 +1251,12 @@
 				</inline-edit>
 			</edit>
 		</open>
-		<diy-instructions lang="en">Ensure that you have run the SQL queries at the start of the MOD. These can be run from a command-line session or through an application such as phpMyAdmin.
+		<diy-instructions lang="en">Run the additional install by going to http://example.com/forum/install_multirace_rank_themes.php (where example.com/forum/ is the location of your forum) and following the instructions, then delete the file.
 
 Clear the template cache. Either log in to your server via FTP/SSH and delete cache/tpl_* or log in to the ACP, go to the "Styles" tab then the "Templates" style component, then click "Refresh" for each template and confirm the cache clearing.
 
 Clear the rank theme cache. Either create a new rank, which should rebuild the cache, or delete cache/data_ranks.php.
 
-Add the additional permissions by pointing your browser to http://example.com/forums/install/install_MultiRaceRankThemesPermissions.php (where "example.com/forums/" is the location of your forums), then delete the install_MultiRaceRankThemesPermissions.php file.
-
 Add the "can change rank theme" permission to groups who should be able to change their rank theme. The default is to not allow rank theme changing. With a default forum the easiest way to add the permission to all users is to change the "Standard Features" User Role permission to "Yes" value under the Profile tab.</diy-instructions>
 	</action-group>
 </mod>
\ No newline at end of file
--- a/root/install/install_MultiRaceRankThemesPermissions.php	Mon Aug 02 19:30:31 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-<?php
-
-/**
-*
-* install script to set up permission options in the db for the Multi-Race Rank Themes mod
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
-*
-*/
-
-/**
-* @ignore
-*/
-
-// initialize the page
-define('IN_PHPBB', true);
-define('IN_INSTALL', true);
-$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
-$phpEx = substr(strrchr(__FILE__, '.'), 1);
-include($phpbb_root_path . 'common.' . $phpEx);
-
-
-// Start session management
-$user->session_begin();
-$auth->acl($user->data);
-$user->setup();
-
-
-// Setup $auth_admin class so we can add tabulated survey permission options
-include($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
-$auth_admin = new auth_admin();
-
-// Add foo permissions as local permissions
-// (you could instead make them global permissions by making the obvious changes below)
-$auth_admin->acl_add_option(array(
-    'global'    => array('u_change_rank_theme')
-));
-
-
-$message = $user->lang['MULTI_RACE_ADDED_PERMISSIONS'] . '<br /><br />';
-$message .= $user->lang['REMOVE_INSTALL'];
-trigger_error($message);
-
-?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/install_multirace_rank_themes.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,91 @@
+<?php
+/**
+ *
+ * @author IBBoard (IBBoard) phpbb@ibboard.co.uk
+ * @version $Id$
+ * @copyright (c) 2010 IBBoard
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+define('UMIL_AUTO', true);
+$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
+$phpEx = substr(strrchr(__FILE__, '.'), 1);
+
+if (!file_exists($phpbb_root_path . 'umil/umil_auto.' . $phpEx))
+{
+	trigger_error('Please download the latest UMIL (Unified MOD Install Library) from: <a href="http://www.phpbb.com/mods/umil/">phpBB.com/mods/umil</a>', E_USER_ERROR);
+}
+
+// The name of the mod to be displayed during installation.
+$mod_name = 'Multi-Race Rank Themes';
+
+/*
+* The name of the config variable which will hold the currently installed version
+* UMIL will handle checking, setting, and updating the version itself.
+*/
+$version_config_name = 'multirace_rank_themes_version';
+
+
+// The language file which will be included when installing
+$language_file = 'mods/permissions_MultiRaceRankThemes';
+
+
+/*
+* Optionally we may specify our own logo image to show in the upper corner instead of the default logo.
+* $phpbb_root_path will get prepended to the path specified
+* Image height should be 50px to prevent cut-off or stretching.
+*/
+//$logo_img = 'styles/prosilver/imageset/site_logo.gif';
+
+/*
+* The array of versions and actions within each.
+* You do not need to order it a specific way (it will be sorted automatically), however, you must enter every version, even if no actions are done for it.
+*
+* You must use correct version numbering.  Unless you know exactly what you can use, only use X.X.X (replacing X with an integer).
+* The version numbering must otherwise be compatible with the version_compare function - http://php.net/manual/en/function.version-compare.php
+*/
+$versions = array(
+	'1.4.2' => array(
+
+		'permission_add' => array(
+			array('u_change_rank_theme', 1),
+		),
+
+		'table_add' => array(
+			array('phpbb_rank_themes', array(
+				'COLUMNS' => array(
+					'rtheme_id' => array('INT:10', NULL, 'auto_increment'),
+					'rtheme_title' => array('VCHAR:50', ''),
+					'rtheme_public' => array('TINT:1', 0),
+				),
+
+				'PRIMARY_KEY'	=> array('rtheme_id'),
+			)),
+
+		),
+
+		'table_column_add' => array(
+			array('phpbb_users', 'user_rank_theme', array('INT:10', 1)),
+			array('phpbb_ranks', 'rank_theme', array('INT:10', 1)),
+		),
+		
+		'table_row_update' => array(
+			array('phpbb_ranks', array('rank_special' => 1), array('rank_theme' => -1))
+		),
+		
+		'table_row_insert' => array(
+			array('phpbb_rank_themes', array(
+				array('rtheme_id' => -1, 'rtheme_title' => 'Special', 'rtheme_public' => 0),
+				array('rtheme_id' => 1, 'rtheme_title' => 'Default', 'rtheme_public' => 1)
+			))
+		),
+		
+	),
+);
+
+// Include the UMIL Auto file, it handles the rest
+include($phpbb_root_path . 'umil/umil_auto.' . $phpEx);
\ No newline at end of file
--- a/root/styles/prosilver/template/memberlist_ranks.html	Mon Aug 02 19:30:31 2010 +0000
+++ b/root/styles/prosilver/template/memberlist_ranks.html	Sat Dec 04 20:11:27 2010 +0000
@@ -1,5 +1,5 @@
 <!-- INCLUDE overall_header.html -->
-<h2 class="solo"><!-- IF U_RANKSET_LIST_LINK --><a href="{U_RANKSET_LIST_LINK}">{PAGE_TITLE}</a><!-- ELSE -->{PAGE_TITLE}<!-- ENDIF --><!-- IF RANKSET_NAME -->: {RANKSET_NAME}<!-- ENDIF --></h2>
+<h2 class="solo"><!-- IF U_RANKSET_LIST_LINK --><a href="{U_RANKSET_LIST_LINK}">{PAGE_TITLE}</a><!-- ELSE -->{PAGE_TITLE}<!-- ENDIF --> <!-- IF RANKSET_NAME -->: {RANKSET_NAME}<!-- ENDIF --></h2>
 
 	<!-- IF RANKSET_NAME -->
 <div class="forumbg forumbg-table">
@@ -14,14 +14,14 @@
 		</thead>
 		<tbody>
 		<!-- BEGIN rank -->
-		<tr class="<!-- IF rank.S_ROW_COUNT is even -->bg1<!-- ELSE -->bg2<!-- ENDIF -->">
+		<tr class="<!-- IF rank.S_ROW_COUNT is even --> bg1 <!-- ELSE --> bg2 <!-- ENDIF --> ">
 			<td class="name">{rank.RANK_NAME}</td>
 			<td class="image">{rank.RANK_IMG}</td>
 			<td class="postcount">{rank.RANK_POSTS}</td>
 		</tr>
 		<!-- BEGINELSE -->
-		<tr>
-			<td>{L_NO_RANKS}</td>
+		<tr class="bg1">
+			<td colspan="3">{L_NO_RANKS}</td>
 		</tr>
 		<!-- END rank -->
 		</tbody>
@@ -30,17 +30,18 @@
 </div>
 	<!-- ELSE -->
 
-<div class="panel bg1" id="faqlinks">
+<div class="panel bg2">
 	<div class="inner"><span class="corners-top"><span></span></span>
 	<div class="content">
 		<p>{L_RANKTHEME_TEXT}</p>
-		<ul>
+		<dl class="rankthemes">
+			<dt>{PAGE_TITLE}</dt>
 			<!-- BEGIN rankset -->
-			<li><a href="{rankset.RANKSET_URL}">{rankset.RANKSET_NAME}</a></li>
+			<dd><a href="{rankset.RANKSET_URL}">{rankset.RANKSET_NAME}</a></dd>
 			<!-- BEGINELSE -->
-			<li>{L_NO_RANKSETS}</td>
+			<dd>{L_NO_RANKSET_ERROR}</dd>
 			<!-- END rankset -->
-		</ul>
+		</dl>
 	</div>
 	<span class="corners-bottom"><span></span></span></div>
 </div>
--- a/root/styles/subsilver2/template/memberlist_ranks.html	Mon Aug 02 19:30:31 2010 +0000
+++ b/root/styles/subsilver2/template/memberlist_ranks.html	Sat Dec 04 20:11:27 2010 +0000
@@ -20,8 +20,8 @@
 		<td class="gen">{rank.RANK_POSTS}</td>
 	</tr>
 	<!-- BEGINELSE -->
-	<tr>
-		<td>{L_NO_RANKS}</td>
+	<tr class="row1">
+		<td class="gen" colspan="3">{L_NO_RANKS}</td>
 	</tr>
 	<!-- END rank -->
 	<tr>
@@ -35,18 +35,19 @@
 
 	<table class="tablebg" width="100%" cellspacing="1">
 	<tr>
-		<th>{PAGE_TITLE}</th>
+		<th class="name">{PAGE_TITLE}</th>
 	</tr>
 	<tr>
 		<td class="row1">
 			<p class="postbody">{L_RANKTHEME_TEXT}</p>
-			<ul>
+			<dl class="rankthemes">
+				<dt>{PAGE_TITLE}</dt>
 				<!-- BEGIN rankset -->
-				<li class="gen"><a href="{rankset.RANKSET_URL}">{rankset.RANKSET_NAME}</a></li>
+				<dd><a href="{rankset.RANKSET_URL}">{rankset.RANKSET_NAME}</a></dd>
 				<!-- BEGINELSE -->
-				<li class="gen">{L_NO_RANKSETS}</td>
+				<dd>{L_NO_RANKSET_ERROR}</dd>
 				<!-- END rankset -->
-			</ul>
+			</dl>
 		</td>
 	</tr>
 	<tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/error_files/.htaccess	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,4 @@
+<Files *>
+	Order Allow,Deny
+	Deny from All
+</Files>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/error_files/index.htm	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title></title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/file.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,70 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: file.php 149 2009-06-16 00:58:51Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+* @ignore
+*/
+define('IN_PHPBB', true);
+$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../';
+$phpEx = substr(strrchr(__FILE__, '.'), 1);
+include($phpbb_root_path . 'common.' . $phpEx);
+
+// Start session management
+$user->session_begin();
+$auth->acl($user->data);
+$user->setup('viewtopic');
+
+$file = request_var('file', '');
+$filename = $phpbb_root_path . 'umil/error_files/' . $file . '.txt';
+
+if ($user->data['user_type'] != USER_FOUNDER || // Only founders can access this.
+	!$file || // Do we have a file name?
+	strpos($file, '/') || strpos($file, '.')) // Make sure they are not attempting to grab files outside of the umil/error_files/ directory
+{
+	header('HTTP/1.0 403 Forbidden');
+	trigger_error($user->lang['LINKAGE_FORBIDDEN']);
+}
+
+// Check if headers already sent or not able to get the file contents.
+if (headers_sent() || !@file_exists($filename) || !@is_readable($filename))
+{
+	// PHP track_errors setting On?
+	if (!empty($php_errormsg))
+	{
+		trigger_error($user->lang['UNABLE_TO_DELIVER_FILE'] . '<br />' . sprintf($user->lang['TRACKED_PHP_ERROR'], $php_errormsg));
+	}
+
+	trigger_error('UNABLE_TO_DELIVER_FILE');
+}
+
+header('Content-type: text/plain');
+header('Content-Disposition: filename="' . $file . '.txt"');
+
+$size = @filesize($filename);
+if ($size)
+{
+	header("Content-Length: $size");
+}
+
+$fp = @fopen($filename, 'rb');
+if ($fp !== false)
+{
+	while (!feof($fp))
+	{
+		echo fread($fp, 8192);
+	}
+	fclose($fp);
+}
+
+garbage_collection();
+exit_handler();
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/index.htm	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title></title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/ar/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,132 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 210 2010-03-24 00:59:20Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @translated By: http://www.phpbbarabia.com/ - Garebooo
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+    exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+    $lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+    'ACTION'                        => 'العملية',
+    'ADVANCED'                        => 'متقدم',
+    'AUTH_CACHE_PURGE'                => 'حذف ملفات المصادقة المؤقتة',
+
+    'CACHE_PURGE'                    => 'حذف ملفات المنتدى المؤقتة',
+    'CONFIGURE'                        => 'إعداد',
+    'CONFIG_ADD'                    => 'إضافة إعداد متغير جديد : %s',
+    'CONFIG_ALREADY_EXISTS'            => 'خطأ : إعداد المتغير %s موجودة مسبقاً',
+    'CONFIG_NOT_EXIST'                => 'خطأ : إعداد المتغير %s غير موجودة',
+    'CONFIG_REMOVE'                    => 'حذف إعداد المتغير : %s',
+    'CONFIG_UPDATE'                    => 'تحديث إعداد المتغير : %s',
+
+    'DISPLAY_RESULTS'                => 'عرض جميع النتائج',
+    'DISPLAY_RESULTS_EXPLAIN'        => '    اختر نعم لعرض جميع العمليات و النتائج التي تمت خلال العملية المطلوبة',
+
+    'ERROR_NOTICE'                    => 'ظهر خطأ أو أكثر أثناء القيام بالعملية المطلوبة ،  من فضل قم بتحميل <a href="%1$s">الملف التالي</a> واطلب من مبرمج الهاك المساعدة أو اطلب المساعدة في منتديات الدعم الفني العربي <a href="http://www.phpbbarabia.com/community/" title="دعم phpBB"></a><br /><br />إذا كنت تواجه مشكله في تنزيل الملف فضلاً ادخل ببرنامج FTP وحمل ملف سجل الأخطاء بإتباعك حسب التالي : %2$s',
+    'ERROR_NOTICE_NO_FILE'            => 'هناك خطأ أو أكثر قد ظهر أثناء القيام بالعملية المطلوبة ، من فضلك تأكد من إتمام بالعملية بالشكل الصحيح و اطلب مساعدة مبرمج الهاك إذا احتاج الأمر',
+
+    'FAIL'                            => 'فشل',
+    'FILE_COULD_NOT_READ'            => 'خطأ : لا يمكن فتح الملف  %s للقراءة',
+    'FOUNDERS_ONLY'                    => 'يجب أن يكون لك صلاحية المؤسس للدخول إلى هذه الصفحة',
+
+    'GROUP_NOT_EXIST'                => 'المجموعة غير موجودة',
+
+    'IGNORE'                        => 'تجاهل',
+    'IMAGESET_CACHE_PURGE'            => 'تحديث حزمة الصور الخاصة بـ %s ',
+    'INSTALL'                        => 'تنصيب',
+    'INSTALL_MOD'                    => 'تنصيب %s',
+    'INSTALL_MOD_CONFIRM'            => 'هل أنت جاهز لتنصيب %s?',
+
+    'MODULE_ADD'                    => 'إضافة %1$s موديل : %2$s',
+    'MODULE_ALREADY_EXIST'            => 'خطأ : الموديل موجود بالفعل',
+    'MODULE_NOT_EXIST'                => 'خطأ : الموديل غير موجود',
+    'MODULE_REMOVE'                    => 'إلغاء %1$s الموديل : %2$s',
+
+    'NONE'                            => 'بدون',
+    'NO_TABLE_DATA'                    => 'خطأ : لم يتم تحديد جداول معينه',
+
+    'PARENT_NOT_EXIST'                => 'خطأ : المنتدى الأصلي حدد موديل غير موجود',
+    'PERMISSIONS_WARNING'            => 'تم إضافة إذن جديد ،  فضلاً تأكد من إطلاعك على إعداد الإذن و تأكد من انك ضبطتها بالشكل الصحيح',
+    'PERMISSION_ADD'                => 'إضافة إذن جديد للخيار : %s',
+    'PERMISSION_ALREADY_EXISTS'        => 'خطأ : خيارات الإذن %s موجودة سابقاً',
+    'PERMISSION_NOT_EXIST'            => 'خطأ : خيارات الإذن %s غير موجودة',
+    'PERMISSION_REMOVE'                => 'إلغاء خيارات الإذن : %s',
+    'PERMISSION_ROLE_ADD'            => 'إضافة قالب صلاحيات جديد %s',
+    'PERMISSION_ROLE_UPDATE'        => 'تحديث قالب الصلاحيات %s',
+    'PERMISSION_ROLE_REMOVE'        => 'إزالة قالب الصلاحيات %s',
+    'PERMISSION_SET_GROUP'            => 'إعداد الإذن %s للمجموعة',
+    'PERMISSION_SET_ROLE'            => 'إعداد الإذن %s للصلاحية',
+    'PERMISSION_UNSET_GROUP'        => 'إلغاء الإذن %s للمجموعة',
+    'PERMISSION_UNSET_ROLE'            => 'إلغاء الإذن %s للصلاحية',
+
+    'ROLE_ALREADY_EXISTS'            => 'الصلاحية موجودة مسبقاً',
+    'ROLE_NOT_EXIST'                => 'الصلاحية غير موجودة',
+
+    'SUCCESS'                        => 'تم بنجاح',
+
+    'TABLE_ADD'                        => 'إضافة جدول جديد في قاعدة البيانات : %s',
+    'TABLE_ALREADY_EXISTS'            => 'خطأ : قاعدة بيانات الجدول %s موجودة مسبقاً',
+    'TABLE_COLUMN_ADD'                => 'إضافة عمود جديد باسم %2$s إلى الجدول %1$s',
+    'TABLE_COLUMN_ALREADY_EXISTS'    => 'خطأ : العمود %2$s موجود في الجدول %1$s',
+    'TABLE_COLUMN_NOT_EXIST'        => 'خطأ : العمود %2$s غير موجود في الجدول %1$s',
+    'TABLE_COLUMN_REMOVE'            => 'إلغاء العامود %2$s في جدول %1$s',
+    'TABLE_COLUMN_UPDATE'            => 'تحديث العامود %2$s في جدول %1$s',
+    'TABLE_KEY_ADD'                    => 'إضافة %2$s إلى الجدول %1$s',
+    'TABLE_KEY_ALREADY_EXIST'        => 'خطأ : إن index %2$s موجود في الجدول %1$s',
+    'TABLE_KEY_NOT_EXIST'            => 'خطأ : إن index %2$s لم يتم إيجاده في الجدول %1$s',
+    'TABLE_KEY_REMOVE'                => 'حذف %2$s من الجدول %1$s',
+    'TABLE_NOT_EXIST'                => 'خطأ : الجدول %s غير موجود',
+    'TABLE_REMOVE'                    => 'حذف من قواعد البيانات الجدول : %s',
+    'TABLE_ROW_INSERT_DATA'            => 'إضافة المعلومات في %s قواعد البيانات',
+    'TABLE_ROW_REMOVE_DATA'            => 'حذف الصف من جدول %s في قواعد البيانات',
+    'TABLE_ROW_UPDATE_DATA'            => 'تحديث الصف من جدول %s في قواعد البيانات',
+    'TEMPLATE_CACHE_PURGE'            => 'تحديث قوالب %s',
+    'THEME_CACHE_PURGE'                => 'تحديث الاستايل %s',
+
+    'UNINSTALL'                        => 'إلغاء التثبيت',
+    'UNINSTALL_MOD'                    => 'إلغاء تثبيت %s',
+    'UNINSTALL_MOD_CONFIRM'            => 'هل أنت مستعد لإلغاء تثبيت %s ? جميع المعلومات و الإعداد الخاص بالهاك سيتم حذفها !',
+    'UNKNOWN'                        => 'غير معروف',
+    'UPDATE_MOD'                    => 'تحديث %s',
+    'UPDATE_MOD_CONFIRM'            => 'هل أنت مستعد لتحديث %s ?',
+    'UPDATE_UMIL'                    => 'أن نسخة UMIL قديمة !<br /><br />فضلاً قم بتحميل النسخة الأخيرة من UMIL (Unified MOD Install Library) من خلال : <a href="%1$s">%1$s</a>',
+
+    'VERSIONS'                        => 'إصدار الهاك : <strong>%1$s</strong><br />المثبت حالياً : <strong>%2$s</strong>',
+    'VERSION_SELECT'                => 'الإصدار المختار',
+    'VERSION_SELECT_EXPLAIN'        => 'لا تقم بالتغير من " تجاهل " إلا إذا علمت ماذا تفعل أو طلب منك ذلك !',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/da/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,134 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @phpBB source Id: umil.php 202 2010-03-11 02:19:30Z exreaction $
+ * @version $Id: umil.php 222 2010-05-27 20:06:33Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @translated by Olympus DK Team
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Handling',
+	'ADVANCED'						=> 'Avanceret',
+	'AUTH_CACHE_PURGE'				=> 'Tømmer auth-cache',
+
+	'CACHE_PURGE'					=> 'Tømmer boardets cache',
+	'CONFIGURE'						=> 'Konfigurerer',
+	'CONFIG_ADD'					=> 'Tilføjer ny konfigurationvariabel: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'FEJL: Konfigurationvariabel %s eksisterer allerede.',
+	'CONFIG_NOT_EXIST'				=> 'FEJL: Konfigurationvariabel %s findes ikke.',
+	'CONFIG_REMOVE'					=> 'Sletter konfigurationvariabel: %s',
+	'CONFIG_UPDATE'					=> 'Opdaterer konfigurationvariabel: %s',
+
+	'DISPLAY_RESULTS'				=> 'Vis samlet status',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Vælg ja, for at få vist alle udførte handlinger og disses resultater.',
+
+	'ERROR_NOTICE'					=> 'Der opstod en eller flere fejl under udførsel af handlingerne. Download venligst <a href="%1$s">denne  fil</a> indeholdende fejlene og kontakt MOD-udvikleren for yderligere hjælp.<br /><br />Er der problemer med at downloade filen, kan den hentes direkte med en FTP-klient på denne placering: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Der opstod en eller flere fejl under udførsel af handlingerne. Noter alle fejlene og kontakt MOD-udvikleren for yderligere hjælp.',
+
+	'FAIL'							=> 'Fejl',
+	'FILE_COULD_NOT_READ'			=> 'FEJL: Kunne ikke åbne og læse filen %s.',
+	'FOUNDERS_ONLY'					=> 'Du skal være grundlægger for at kunne tilgå denne side.',
+
+	'GROUP_NOT_EXIST'				=> 'Gruppe eksisterer ikke',
+
+	'IGNORE'						=> 'Ignorer',
+	'IMAGESET_CACHE_PURGE'			=> 'Genopfrisker grafikpakken %s',
+	'INSTALL'						=> 'Installer',
+	'INSTALL_MOD'					=> 'Installerer %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Er du klar til at installere %s?',
+
+	'MODULE_ADD'					=> 'Tilføjer %1$s modul: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'FEJL: Modulet eksisterer allerede.',
+	'MODULE_NOT_EXIST'				=> 'FEJL: Modulet eksisterer ikke.',
+	'MODULE_REMOVE'					=> 'Sletter %1$s modul: %2$s',
+
+	'NONE'							=> 'Ingen',
+	'NO_TABLE_DATA'					=> 'FEJL: Ingen datatabel specificeret',
+
+	'PARENT_NOT_EXIST'				=> 'FEJL: Kategorien specificeret til dette modul eksisterer ikke.',
+	'PERMISSIONS_WARNING'			=> 'Nye tilladelseindstillinger er tilføjet. Kontroller venligst at indstillingerne er som du ønsker.',
+	'PERMISSION_ADD'				=> 'Tilføjer ny tilladelsemulighed: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'FEJL: Tilladelsen %s eksisterer allerede.',
+	'PERMISSION_NOT_EXIST'			=> 'FEJL: Tilladelsen %s eksisterer ikke.',
+	'PERMISSION_REMOVE'				=> 'Sletter tilladelsen: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Tilføjer ny tilladelserolle: %s',
+	'PERMISSION_ROLE_UPDATE'	=> 'Opdaterer tilladelserolle: %s',
+	'PERMISSION_ROLE_REMOVE'	=> 'Sletter tilladelserolle: %s',
+	'PERMISSION_SET_GROUP'			=> 'Indstiller tilladelser for gruppen %s.',
+	'PERMISSION_SET_ROLE'			=> 'Indstiller tilladelser for rollen %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Fjerner tilladelser for gruppen %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Fjerner tilladelser for rollen %s.',
+
+	'ROLE_ALREADY_EXISTS' => 'Tilladelserolle eksisterer allerede.',
+	'ROLE_NOT_EXIST'				=> 'Tilladelserolle eksisterer ikke.',
+
+	'SUCCESS'						=> 'Udført',
+
+	'TABLE_ADD'						=> 'Tilføjer ny databasetabel: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'FEJL: Databasetabellen %s eksisterer allerede.',
+	'TABLE_COLUMN_ADD'				=> 'Tilføjer en ny kolonne med navnet %2$s i tabellen %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'FEJL: Kolonnen %2$s eksisterer allerede i tabellen %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'FEJL: Kolonnen %2$s eksisterer ikke i tabellen %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Sletter kolonnen %2$s i tabellen %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Opdaterer kolonnen %2$s i tabellen %1$s',
+	'TABLE_KEY_ADD'					=> 'Tilføjer nøglen %2$s i tabellen %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'FEJL: Indekset %2$s eksisterer allerede i tabellen %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'FEJL: Indekset %2$s findes ikke i tabellen %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Sletter nøglen %2$s i tabellen %1$s',
+	'TABLE_NOT_EXIST'				=> 'FEJL: Databasetabellen %s eksisterer ikke.',
+	'TABLE_REMOVE'					=> 'Sletter databasetabellen: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Indsætter data i tabellen: %s',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Sletter en række i tabellen: %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Opdaterer en række i tabellen: %s',
+	'TEMPLATE_CACHE_PURGE'			=> 'Genopfrisker skabelonen %s',
+	'THEME_CACHE_PURGE'				=> 'Genopfrisker temaet %s',
+
+	'UNINSTALL'						=> 'Afinstaller',
+	'UNINSTALL_MOD'					=> 'Afinstallerer %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Er du klar til at afinstallere %s? Alle indstillinger og data gemt af dette MOD bliver slettet!',
+	'UNKNOWN'						=> 'Ukendt',
+	'UPDATE_MOD'					=> 'Opdaterer %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Er du klar til at opdatere %s?',
+	'UPDATE_UMIL'					=> 'Denne version af UMIL er forældet.<br /><br />Download venligst nyeste UMIL (Unified MOD Install Library) fra: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'MOD-version: <strong>%1$s</strong><br />I øjeblikket er version <strong>%2$s</strong> installeret',
+	'VERSION_SELECT'				=> 'Valg af version',
+	'VERSION_SELECT_EXPLAIN'		=> 'Fasthold "Ignorer", medmindre du ved hvad det betyder, eller du er blevet bedt om det.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/de/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,137 @@
+<?php
+/**
+ *
+ * umil [Deutsch — Du]
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 212 2010-03-28 18:57:18Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ * Deutsche Übersetzung durch die Übersetzer-Gruppe von phpBB.de:
+ * siehe docs/AUTHORS und http://www.phpbb.de/go/ubersetzerteam
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Vorgang',
+	'ADVANCED'						=> 'Fortgeschritten',
+	'AUTH_CACHE_PURGE'				=> 'Leere Berechtigungs-Cache',
+
+	'CACHE_PURGE'					=> 'Leere Cache des Forums',
+	'CONFIGURE'						=> 'Konfiguration',
+	'CONFIG_ADD'					=> 'Lege neue Konfigurationsvariable an: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'FEHLER: Konfigurationsvariable %s existiert bereits.',
+	'CONFIG_NOT_EXIST'				=> 'FEHLER: Konfigurationsvariable %s existiert nicht.',
+	'CONFIG_REMOVE'					=> 'Lösche Konfigurationsvariable: %s',
+	'CONFIG_UPDATE'					=> 'Aktualisiere Konfigurationsvariable: %s',
+
+	'DISPLAY_RESULTS'				=> 'Vollständige Ergebnisse anzeigen',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Wähle Ja aus, um alle Vorgänge und Ergebnisse der Aktion angezeigt zu bekommen.',
+
+	'ERROR_NOTICE'					=> 'Einer oder mehrere Fehler sind während der angeforderten Aktion aufgetreten. Bitte lade <a href="%1$s">diese Datei</a>, die eine Liste der Fehler enthält, herunter und bitte den Autor der Modifikation um Unterstützung.<br /><br />Wenn beim herunterladen der Datei Probleme auftreten, kannst du sie auch direkt mit einem FTP-Programm unter folgender Adresse herunterladen: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Einer oder mehrere Fehler sind während der angeforderten Aktion aufgetreten. Bitte erstelle eine vollständige Kopie aller aufgetretenen Fehler und bitte den Autor der Modifikation um Unterstützung.',
+
+	'FAIL'							=> 'Gescheitert',
+	'FILE_COULD_NOT_READ'			=> 'FEHLER: Datei %s konnte nicht zum Lesen geöffnet werden.',
+	'FOUNDERS_ONLY'					=> 'Du musst Gründer-Status haben, um diese Seite betreten zu können.',
+
+	'GROUP_NOT_EXIST'				=> 'Gruppe existiert nicht',
+
+	'IGNORE'						=> 'Ignorieren',
+	'IMAGESET_CACHE_PURGE'			=> 'Aktualisiere die Grafiksammlung %s',
+	'INSTALL'						=> 'Installieren',
+	'INSTALL_MOD'					=> 'Installiere %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Bist du bereit, %s zu installieren?',
+
+	'MODULE_ADD'					=> 'Füge %1$s-Modul hinzu: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'FEHLER: Modul existiert bereits.',
+	'MODULE_NOT_EXIST'				=> 'FEHLER: Modul existiert nicht.',
+	'MODULE_REMOVE'					=> 'Entferne %1$s-Modul: %2$s',
+
+	'NONE'							=> 'keine',
+	'NO_TABLE_DATA'					=> 'FEHLER: Es wurden keine Tabellendaten angegeben',
+
+	'PARENT_NOT_EXIST'				=> 'FEHLER: Die übergeordnete Kategorie, die für dieses Modul angegeben wurde, existiert nicht.',
+	'PERMISSIONS_WARNING'			=> 'Es wurden neue Berechtigungen hinzugefügt. Bitte prüfe die Berechtigungseinstellungen und passe sie nach deinen Wünschen an.',
+	'PERMISSION_ADD'				=> 'Füge neue Berechtigungsoption hinzu: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'FEHLER: Berechtigungsoption %s existiert bereits.',
+	'PERMISSION_NOT_EXIST'			=> 'FEHLER: Berechtigungsoption %s existiert nicht.',
+	'PERMISSION_REMOVE'				=> 'Entferne Berechtigungsoption: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Füge neue Berechtigungs-Rolle hinzu: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Aktualisiere Berechtiguns-Rolle: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Entferne Berechtiguns-Rolle: %s',
+	'PERMISSION_SET_GROUP'			=> 'Setze Berechtigungen für die %s-Gruppe.',
+	'PERMISSION_SET_ROLE'			=> 'Setze Berechtigungen für die %s-Rolle.',
+	'PERMISSION_UNSET_GROUP'		=> 'Entferne Berechtigung für die %s-Gruppe.',
+	'PERMISSION_UNSET_ROLE'			=> 'Entferne Berechtigung für die %s-Rolle.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Berechtigungs-Rolle existiert bereits.',
+	'ROLE_NOT_EXIST'				=> 'Berechtigungs-Rolle exisitert nicht.',
+
+	'SUCCESS'						=> 'Erfolgreich',
+
+	'TABLE_ADD'						=> 'Eine neue Datenbanktabelle erstellen: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'FEHLER: Die Datenbanktabelle %s existiert bereits.',
+	'TABLE_COLUMN_ADD'				=> 'Eine neue Spalte %2$s der Tabelle %1$s hinzufügen',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'FEHLER: Die Spalte %2$s existiert bereits in Tabelle %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'FEHLER: Die Spalte %2$s existiert nicht in Tabelle %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Lösche die Spalte %2$s aus Tabelle %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Aktualisiere die Spalte %2$s in Tabelle %1$s',
+	'TABLE_KEY_ADD'					=> 'Füge Index %2$s der Tabelle %1$s hinzu',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'FEHLER: Der Index %2$s existiert bereits in Tabelle %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'FEHLER: Der Index %2$s existiert nicht in Tabelle %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Entferne Index %2$s von Tabelle %1$s',
+	'TABLE_NOT_EXIST'				=> 'FEHLER: Datenbanktabelle %s existiert nicht.',
+	'TABLE_REMOVE'					=> 'Lösche Datenbanktabelle: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Füge Datensätze der Tabelle %s hinzu.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Lösche Datensätze der Tabelle %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Aktualisiere einen Datensatz in Tabelle %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Aktualisiere das Template %s',
+	'THEME_CACHE_PURGE'				=> 'Aktualisiere das Theme %s',
+
+	'UNINSTALL'						=> 'Deinstallieren',
+	'UNINSTALL_MOD'					=> 'Deinstalliere %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Bist du bereit, %s zu deinstallieren? Alle Einstellungen und Daten, die von dieser Modifikation gespeichert wurden, werden dadurch gelöscht!',
+	'UNKNOWN'						=> 'Unbekannt',
+	'UPDATE_MOD'					=> 'Aktualisiere %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Bist du bereit, %s zu aktualisieren?',
+	'UPDATE_UMIL'					=> 'Diese Version von UMIL (Unified MOD Install Library) ist veraltet.<br /><br />Bitte lade die aktuelle UMIL-Version von <a href="%1$s">%1$s</a> herunter.',
+
+	'VERSIONS'						=> 'Version der Modifikation: <strong>%1$s</strong><br />Derzeit installiert: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Versionsauswahl',
+	'VERSION_SELECT_EXPLAIN'		=> 'Wähle keine andere Option als „Ignorieren“ aus, sofern du nicht weißt, was du damit machst oder du explizit dazu aufgefordert wurdest.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/de_x_sie/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,137 @@
+<?php
+/**
+ *
+ * umil [Deutsch — Sie]
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 212 2010-03-28 18:57:18Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ * Deutsche Übersetzung durch die Übersetzer-Gruppe von phpBB.de:
+ * siehe docs/AUTHORS und http://www.phpbb.de/go/ubersetzerteam
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Vorgang',
+	'ADVANCED'						=> 'Fortgeschritten',
+	'AUTH_CACHE_PURGE'				=> 'Leere Berechtigungs-Cache',
+
+	'CACHE_PURGE'					=> 'Leere Cache des Forums',
+	'CONFIGURE'						=> 'Konfiguration',
+	'CONFIG_ADD'					=> 'Lege neue Konfigurationsvariable an: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'FEHLER: Konfigurationsvariable %s existiert bereits.',
+	'CONFIG_NOT_EXIST'				=> 'FEHLER: Konfigurationsvariable %s existiert nicht.',
+	'CONFIG_REMOVE'					=> 'Lösche Konfigurationsvariable: %s',
+	'CONFIG_UPDATE'					=> 'Aktualisiere Konfigurationsvariable: %s',
+
+	'DISPLAY_RESULTS'				=> 'Vollständige Ergebnisse anzeigen',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Wählen Sie Ja aus, um alle Vorgänge und Ergebnisse der Aktion angezeigt zu bekommen.',
+
+	'ERROR_NOTICE'					=> 'Einer oder mehrere Fehler sind während der angeforderten Aktion aufgetreten. Bitte laden Sie <a href="%1$s">diese Datei</a>, die eine Liste der Fehler enthält, herunter und bitten Sie den Autor der Modifikation um Unterstützung.<br /><br />Wenn beim herunterladen der Datei Probleme auftreten, können Sie sie auch direkt mit einem FTP-Programm unter folgender Adresse herunterladen: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Einer oder mehrere Fehler sind während der angeforderten Aktion aufgetreten. Bitte erstellen Sie eine vollständige Kopie aller aufgetretenen Fehler und bitte Sie den Autor der Modifikation um Unterstützung.',
+
+	'FAIL'							=> 'Gescheitert',
+	'FILE_COULD_NOT_READ'			=> 'FEHLER: Datei %s konnte nicht zum Lesen geöffnet werden.',
+	'FOUNDERS_ONLY'					=> 'Sie müssen Gründer-Status haben, um diese Seite betreten zu können.',
+
+	'GROUP_NOT_EXIST'				=> 'Gruppe existiert nicht',
+
+	'IGNORE'						=> 'Ignorieren',
+	'IMAGESET_CACHE_PURGE'			=> 'Aktualisiere die Grafiksammlung %s',
+	'INSTALL'						=> 'Installieren',
+	'INSTALL_MOD'					=> 'Installiere %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Sind Sie bereit, %s zu installieren?',
+
+	'MODULE_ADD'					=> 'Füge %1$s-Modul hinzu: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'FEHLER: Modul existiert bereits.',
+	'MODULE_NOT_EXIST'				=> 'FEHLER: Modul existiert nicht.',
+	'MODULE_REMOVE'					=> 'Entferne %1$s-Modul: %2$s',
+
+	'NONE'							=> 'keine',
+	'NO_TABLE_DATA'					=> 'FEHLER: Es wurden keine Tabellendaten angegeben',
+
+	'PARENT_NOT_EXIST'				=> 'FEHLER: Die übergeordnete Kategorie, die für dieses Modul angegeben wurde, existiert nicht.',
+	'PERMISSIONS_WARNING'			=> 'Es wurden neue Berechtigungen hinzugefügt. Bitte prüfen Sie die Berechtigungseinstellungen und passen Sie sie nach Ihren Wünschen an.',
+	'PERMISSION_ADD'				=> 'Füge neue Berechtigungsoption hinzu: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'FEHLER: Berechtigungsoption %s existiert bereits.',
+	'PERMISSION_NOT_EXIST'			=> 'FEHLER: Berechtigungsoption %s existiert nicht.',
+	'PERMISSION_REMOVE'				=> 'Entferne Berechtigungsoption: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Füge neue Berechtigungs-Rolle hinzu: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Aktualisiere Berechtiguns-Rolle: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Entferne Berechtiguns-Rolle: %s',
+	'PERMISSION_SET_GROUP'			=> 'Setze Berechtigungen für die %s-Gruppe.',
+	'PERMISSION_SET_ROLE'			=> 'Setze Berechtigungen für die %s-Rolle.',
+	'PERMISSION_UNSET_GROUP'		=> 'Entferne Berechtigung für die %s-Gruppe.',
+	'PERMISSION_UNSET_ROLE'			=> 'Entferne Berechtigung für die %s-Rolle.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Berechtigungs-Rolle existiert bereits.',
+	'ROLE_NOT_EXIST'				=> 'Berechtigungs-Rolle exisitert nicht.',
+
+	'SUCCESS'						=> 'Erfolgreich',
+
+	'TABLE_ADD'						=> 'Eine neue Datenbanktabelle erstellen: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'FEHLER: Die Datenbanktabelle %s existiert bereits.',
+	'TABLE_COLUMN_ADD'				=> 'Eine neue Spalte %2$s der Tabelle %1$s hinzufügen',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'FEHLER: Die Spalte %2$s existiert bereits in Tabelle %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'FEHLER: Die Spalte %2$s existiert nicht in Tabelle %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Lösche die Spalte %2$s aus Tabelle %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Aktualisiere die Spalte %2$s in Tabelle %1$s',
+	'TABLE_KEY_ADD'					=> 'Füge Index %2$s der Tabelle %1$s hinzu',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'FEHLER: Der Index %2$s existiert bereits in Tabelle %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'FEHLER: Der Index %2$s existiert nicht in Tabelle %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Entferne Index %2$s von Tabelle %1$s',
+	'TABLE_NOT_EXIST'				=> 'FEHLER: Datenbanktabelle %s existiert nicht.',
+	'TABLE_REMOVE'					=> 'Lösche Datenbanktabelle: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Füge Datensätze der Tabelle %s hinzu.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Lösche Datensätze der Tabelle %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Aktualisiere einen Datensatz in Tabelle %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Aktualisiere das Template %s',
+	'THEME_CACHE_PURGE'				=> 'Aktualisiere das Theme %s',
+
+	'UNINSTALL'						=> 'Deinstallieren',
+	'UNINSTALL_MOD'					=> 'Deinstalliere %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Sind Sie bereit, %s zu deinstallieren? Alle Einstellungen und Daten, die von dieser Modifikation gespeichert wurden, werden dadurch gelöscht!',
+	'UNKNOWN'						=> 'Unbekannt',
+	'UPDATE_MOD'					=> 'Aktualisiere %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Sind Sie bereit, %s zu aktualisieren?',
+	'UPDATE_UMIL'					=> 'Diese Version von UMIL (Unified MOD Install Library) ist veraltet.<br /><br />Bitte laden Sie die aktuelle UMIL-Version von <a href="%1$s">%1$s</a> herunter.',
+
+	'VERSIONS'						=> 'Version der Modifikation: <strong>%1$s</strong><br />Derzeit installiert: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Versionsauswahl',
+	'VERSION_SELECT_EXPLAIN'		=> 'Wählen Sie keine andere Option als „Ignorieren“ aus, sofern Sie nicht wissen, was Sie damit machen oder Sie explizit dazu aufgefordert wurden.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/en/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,132 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 228 2010-06-29 19:43:25Z SyntaxError90 $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Action',
+	'ADVANCED'						=> 'Advanced',
+	'AUTH_CACHE_PURGE'				=> 'Purging the Auth Cache',
+
+	'CACHE_PURGE'					=> 'Purging your forum’s cache',
+	'CONFIGURE'						=> 'Configure',
+	'CONFIG_ADD'					=> 'Adding new config variable: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'ERROR: Config variable %s already exists.',
+	'CONFIG_NOT_EXIST'				=> 'ERROR: Config variable %s does not exist.',
+	'CONFIG_REMOVE'					=> 'Removing config variable: %s',
+	'CONFIG_UPDATE'					=> 'Updating config variable: %s',
+
+	'DISPLAY_RESULTS'				=> 'Display Full Results',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Select yes to display all of the actions and results during the requested action.',
+
+	'ERROR_NOTICE'					=> 'One or more errors occured during the requested action.  Please download <a href="%1$s">this file</a> with the errors listed in it and ask the mod author for assistance.<br /><br />If you have any problem downloading that file you may access it directly with an FTP browser at the following location: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'One or more errors occured during the requested action.  Please make a full record of any errors and ask the mod author for assistance.',
+
+	'FAIL'							=> 'Fail',
+	'FILE_COULD_NOT_READ'			=> 'ERROR: Could not open the file %s for reading.',
+	'FOUNDERS_ONLY'					=> 'You must be a board founder to access this page.',
+
+	'GROUP_NOT_EXIST'				=> 'Group does not exist',
+
+	'IGNORE'						=> 'Ignore',
+	'IMAGESET_CACHE_PURGE'			=> 'Refreshing the %s imageset',
+	'INSTALL'						=> 'Install',
+	'INSTALL_MOD'					=> 'Install %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Are you ready to install %s?',
+
+	'MODULE_ADD'					=> 'Adding %1$s module: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'ERROR: Module already exists.',
+	'MODULE_NOT_EXIST'				=> 'ERROR: Module does not exist.',
+	'MODULE_REMOVE'					=> 'Removing %1$s module: %2$s',
+
+	'NONE'							=> 'None',
+	'NO_TABLE_DATA'					=> 'ERROR: No table data was specified',
+
+	'PARENT_NOT_EXIST'				=> 'ERROR: The parent category specified for this module does not exist.',
+	'PERMISSIONS_WARNING'			=> 'New permission settings have been added.  Be sure to check your permission settings and see that they are as you would like them.',
+	'PERMISSION_ADD'				=> 'Adding new permission option: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'ERROR: Permission option %s already exists.',
+	'PERMISSION_NOT_EXIST'			=> 'ERROR: Permission option %s does not exist.',
+	'PERMISSION_REMOVE'				=> 'Removing permission option: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Adding new permission role: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Updating permission role: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Removing permission role: %s',
+	'PERMISSION_SET_GROUP'			=> 'Setting permissions for the %s group.',
+	'PERMISSION_SET_ROLE'			=> 'Setting permissions for the %s role.',
+	'PERMISSION_UNSET_GROUP'		=> 'Unsetting permissions for the %s group.',
+	'PERMISSION_UNSET_ROLE'			=> 'Unsetting permissions for the %s role.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Permission role already exists.',
+	'ROLE_NOT_EXIST'				=> 'Permission role does not exist',
+
+	'SUCCESS'						=> 'Success',
+
+	'TABLE_ADD'						=> 'Adding a new database table: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'ERROR: Database table %s already exists.',
+	'TABLE_COLUMN_ADD'				=> 'Adding a new column named %2$s to table %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'ERROR: The column %2$s already exists on table %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'ERROR: The column %2$s does not exist on table %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Removing the column named %2$s from table %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Updating a column named %2$s from table %1$s',
+	'TABLE_KEY_ADD'					=> 'Adding a key named %2$s to table %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'ERROR: The index %2$s already exists on table %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'ERROR: The index %2$s does not exist on table %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Removing a key named %2$s from table %1$s',
+	'TABLE_NOT_EXIST'				=> 'ERROR: Database table %s does not exist.',
+	'TABLE_REMOVE'					=> 'Removing database table: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Inserting data in the %s database table.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Removing a row from the %s database table',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Updating a row in the %s database table.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Refreshing the %s template',
+	'THEME_CACHE_PURGE'				=> 'Refreshing the %s theme',
+
+	'UNINSTALL'						=> 'Uninstall',
+	'UNINSTALL_MOD'					=> 'Uninstall %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Are you ready to uninstall %s?  All settings and data saved by this mod will be removed!',
+	'UNKNOWN'						=> 'Unknown',
+	'UPDATE_MOD'					=> 'Update %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Are you ready to update %s?',
+	'UPDATE_UMIL'					=> 'This version of UMIL is outdated.<br /><br />Please download the latest UMIL (Unified MOD Install Library) from: <a href="%1$s" target="_blank">%1$s</a>',
+
+	'VERSIONS'						=> 'Mod Version: <strong>%1$s</strong><br />Currently Installed: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Version Select',
+	'VERSION_SELECT_EXPLAIN'		=> 'Do not change from “Ignore” unless you know what you are doing or were told to.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/es/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,132 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 217 2010-04-04 23:47:51Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Acción',
+	'ADVANCED'						=> 'Avanzado',
+	'AUTH_CACHE_PURGE'				=> 'Limpiando el caché de autenticación',
+
+	'CACHE_PURGE'					=> 'Limpiando el caché de su foro',
+	'CONFIGURE'						=> 'Configurar',
+	'CONFIG_ADD'					=> 'Agregando nueva variable de configuración: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'ERROR: La variable de configuración %s ya existe.',
+	'CONFIG_NOT_EXIST'				=> 'ERROR: La variable de configuración %s no existe.',
+	'CONFIG_REMOVE'					=> 'Eliminando variable de configuración: %s',
+	'CONFIG_UPDATE'					=> 'Actualizando variable de configuración: %s',
+
+	'DISPLAY_RESULTS'				=> 'Mostrar resultados completos',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Seleccione Sí para mostrar todas las acciones y resultados durante la acción solicitada.',
+
+	'ERROR_NOTICE'					=> 'Han ocurrido uno o más errores durante la acción solicitada.  Por favor, descargue <a href="%1$s">este archivo</a> con los errores que figuran en él y pregúntele al autor del mod para obtener asistencia.<br /><br />Si usted tiene algún problema para descargar el archivo, usted puede acceder a el directamente con un navegador FTP en la siguiente ubicación: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Han ocurrido uno o más errores durante la acción solicitada.  Por favor, haga un registro completo de los errores y pregúntele al autor del mod para obtener asistencia.',
+
+	'FAIL'							=> 'Fallo',
+	'FILE_COULD_NOT_READ'			=> 'ERROR: No se pudo abrir el archivo %s para la lectura.',
+	'FOUNDERS_ONLY'					=> 'Debe ser un fundador del foro para acceder a esta página.',
+
+	'GROUP_NOT_EXIST'				=> 'El grupo no existe',
+
+	'IGNORE'						=> 'Ignorar',
+	'IMAGESET_CACHE_PURGE'			=> 'Actualizando la %s galería de imágenes',
+	'INSTALL'						=> 'Instalar',
+	'INSTALL_MOD'					=> 'Instalar %s',
+	'INSTALL_MOD_CONFIRM'			=> '¿Está listo para instalar %s?',
+
+	'MODULE_ADD'					=> 'Agregando %1$s módulo: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'ERROR: El Módulo ya existe.',
+	'MODULE_NOT_EXIST'				=> 'ERROR: El Módulo no existe.',
+	'MODULE_REMOVE'					=> 'Eliminando %1$s módulo: %2$s',
+
+	'NONE'							=> 'Nada',
+	'NO_TABLE_DATA'					=> 'ERROR: No se han especificado los datos de la tabla',
+
+	'PARENT_NOT_EXIST'				=> 'ERROR: La categoría padre especificada para este módulo no existe.',
+	'PERMISSIONS_WARNING'			=> 'Nuevas configuraciones de permisos fueron añadidas.  Asegúrese de revisar su configuración de permisos y mire que estén como usted quiere.',
+	'PERMISSION_ADD'				=> 'Añadiendo nueva opción de permiso: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'ERROR: La opción de permiso %s ya existe.',
+	'PERMISSION_NOT_EXIST'			=> 'ERROR: La opción de permiso %s no existe.',
+	'PERMISSION_REMOVE'				=> 'Eliminando opción de permiso: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Añadiendo nuevo rol de permiso: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Actualizando rol de permiso: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Eliminando rol de permiso: %s',
+	'PERMISSION_SET_GROUP'			=> 'Configurando permisos para el grupo %s.',
+	'PERMISSION_SET_ROLE'			=> 'Configurando permisos para el rol %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Desconfigurando permisos para el grupo %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Desconfigurando permisos para el rol %s.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'El rol permiso ya existe.',
+	'ROLE_NOT_EXIST'				=> 'El rol permiso no existe',
+
+	'SUCCESS'						=> 'Éxito',
+
+	'TABLE_ADD'						=> 'Añadiendo una nueva tabla a la base de datos: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'ERROR: La tabla %s de la base de datos ya existe.',
+	'TABLE_COLUMN_ADD'				=> 'Añadiendo una nueva columna llamada %2$s a la tabla %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'ERROR: La columna %2$s ya existe en la tabla %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'ERROR: La columna %2$s no existe en la tabla %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Eliminando la columna llamada %2$s de la tabla %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Actualizando una columna llamada %2$s de la tabla %1$s',
+	'TABLE_KEY_ADD'					=> 'Agregando una llave llamada %2$s de la tabla %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'ERROR: El índice %2$s ya existe en la tabla %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'ERROR: El índice %2$s no existe en la tabla %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Eliminando una llave llamada %2$s de la tabla %1$s',
+	'TABLE_NOT_EXIST'				=> 'ERROR: La tabla %s de la base de datos no existe.',
+	'TABLE_REMOVE'					=> 'Eliminando tabla de la base de datos: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Insertando datos en la tabla %s de la base de datos.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Eliminando una fila en la tabla %s de la base de datos.',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Actualizando una fila en la tabla %s de la base de datos.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Actualizando la plantilla %s',
+	'THEME_CACHE_PURGE'				=> 'Actualizando el tema %s',
+
+	'UNINSTALL'						=> 'Desinstalar',
+	'UNINSTALL_MOD'					=> 'Desinstalar %s',
+	'UNINSTALL_MOD_CONFIRM'			=> '¿Está listo para desinstalar %s?  ¡Todas las configuraciones y datos guardados por este mod serán eliminados!',
+	'UNKNOWN'						=> 'Desconocido',
+	'UPDATE_MOD'					=> 'Actualizar %s',
+	'UPDATE_MOD_CONFIRM'			=> '¿Está listo para actualizar %s?',
+	'UPDATE_UMIL'					=> 'Esta versión de UMIL está obsoleta.<br /><br />Por favor, descargue el último UMIL (Unified MOD Install Library) desde: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Versión del Mod: <strong>%1$s</strong><br />Actualmente instalada: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Seleccione la versión',
+	'VERSION_SELECT_EXPLAIN'		=> 'No cambie de "Ignorar" a menos que sepa lo que está haciendo o se lo digan.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/fr/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,148 @@
+<?php
+/**
+ * This file is part of French (Formal Honorifics) UMIL translation.
+ * Copyright (C) 2010 phpBB.fr
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * @package   umil
+ * @author    Maël Soucaze <maelsoucaze@phpbb.fr> (Maël Soucaze) http://www.phpbb.fr/
+ * @author    EXreaction <N/A> (Nathan Guse) http://lithiumstudios.org
+ * @author    Highway of Life <highwayoflife@gmail.com> (David Lewis) N/A
+ * @copyright 2010 phpBB.fr
+ * @copyright 2008 phpBB Group
+ * @license   http://opensource.org/licenses/gpl-license.php GNU General Public License
+ * @version   $Id: umil.php 207 2010-03-14 16:27:00Z exreaction $
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Action',
+	'ADVANCED'						=> 'Avancé',
+	'AUTH_CACHE_PURGE'				=> 'Purgation du cache d’authentification',
+
+	'CACHE_PURGE'					=> 'Purgation du cache de votre forum',
+	'CONFIGURE'						=> 'Configurer',
+	'CONFIG_ADD'					=> 'Ajout d’une nouvelle variable de configuration : %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'ERREUR : la variable de configuration %s existe déjà.',
+	'CONFIG_NOT_EXIST'				=> 'ERREUR : la variable de configuration %s n’existe pas.',
+	'CONFIG_REMOVE'					=> 'Suppression d’une variable de configuration : %s',
+	'CONFIG_UPDATE'					=> 'Mise à jour d’une variable de configuration : %s',
+
+	'DISPLAY_RESULTS'				=> 'Afficher tous les résultats',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Sélectionnez “oui” afin d’afficher toutes les actions et tous les résultats durant l’action demandée.',
+
+	'ERROR_NOTICE'					=> 'Une ou plusieurs erreurs sont survenues lors de la réalisaton de l’action demandée. Veuillez télécharger <a href="%1$s">ce fichier</a> listant les erreurs et demander de l’aide à l’auteur du MOD.<br /><br />Si vous éprouvez des difficultés à télécharger ce fichier, veuillez le télécharger directement par FTP en cliquant sur le lien suivant : %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Une ou plusieurs erreurs sont survenues lors de la réalisaton de l’action demandée. Veuillez procéder à un enregistrement complet de toutes les erreurs et demander de l’aide à l’auteur du MOD.',
+
+	'FAIL'							=> 'Échec',
+	'FILE_COULD_NOT_READ'			=> 'ERREUR : il n’a pas été possible d’ouvrir le fichier %s afin de le lire.',
+	'FOUNDERS_ONLY'					=> 'Vous devez être un fondateur du forum afin d’accéder à cette page.',
+
+	'GROUP_NOT_EXIST'				=> 'Le groupe n’existe pas',
+
+	'IGNORE'						=> 'Ignorer',
+	'IMAGESET_CACHE_PURGE'			=> 'Rafraîchir l’archive d’images %s',
+	'INSTALL'						=> 'Installer',
+	'INSTALL_MOD'					=> 'Installer %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Êtes-vous prêt à installer %s ?',
+
+	'MODULE_ADD'					=> 'Ajout du module %1$s : %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'ERREUR : le module existe déjà.',
+	'MODULE_NOT_EXIST'				=> 'ERREUR : le module n’existe pas.',
+	'MODULE_REMOVE'					=> 'Suppression du module %1$s : %2$s',
+
+	'NONE'							=> 'Aucun',
+	'NO_TABLE_DATA'					=> 'ERREUR : aucune donnée n’a été spécifiée dans la table',
+
+	'PARENT_NOT_EXIST'				=> 'ERREUR : la catégorie parent spécifiée pour ce module n’existe pas.',
+	'PERMISSIONS_WARNING'			=> 'Les réglages de la nouvelle permission ont été ajoutés. Assurez-vous de vérifier les réglages de votre permission afin qu’ils soient exactement comme vous le souhaitez.',
+	'PERMISSION_ADD'				=> 'Ajout d’une nouvelle option de permission : %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'ERREUR : l’option de permission %s existe déjà.',
+	'PERMISSION_NOT_EXIST'			=> 'ERREUR : l’option de permission %s n’existe pas.',
+	'PERMISSION_REMOVE'				=> 'Suppression d’une option de permission : %s',
+	'PERMISSION_ROLE_ADD'			=> 'Ajout d’un nouveau rôle de permission : %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Mise à jour d’un rôle de permission : %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Suppression d’un rôle de permission : %s',
+	'PERMISSION_SET_GROUP'			=> 'Régler les permissions du groupe %s.',
+	'PERMISSION_SET_ROLE'			=> 'Régler les permissions du rôle %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Dérégler les permissions du groupe %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Dérégler les permissions du rôle %s.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Le rôle de permission existe déjà.',
+  'ROLE_NOT_EXIST'				=> 'Le rôle n’existe pas',
+
+	'SUCCESS'						=> 'Succès',
+
+	'TABLE_ADD'						=> 'Ajout d’une nouvelle table à la base de données : %s',
+	'TABLE_ALREADY_EXISTS'			=> 'ERREUR : la table de la base de données %s existe déjà.',
+	'TABLE_COLUMN_ADD'				=> 'Ajout d’une nouvelle colonne nommée %2$s à la table %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'ERREUR : la colonne %2$s existe déjà dans la table %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'ERREUR : la colonne %2$s n’existe pas dans la table %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Suppression de la colonne nommée %2$s de la table %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Mise à jour de la colonne nommée %2$s de la table %1$s',
+	'TABLE_KEY_ADD'					=> 'Ajout d’une clé nommée %2$s à la table %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'ERREUR : l’index %2$s existe déjà dans la table %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'ERREUR : l’index %2$s n’existe pas dans la table %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Suppression de la clé nommée %2$s de la table %1$s',
+	'TABLE_NOT_EXIST'				=> 'ERREUR : la table de la base de données %s n’existe pas.',
+	'TABLE_REMOVE'					=> 'Suppression d’une table de la base de données : %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Insertion de données dans la table de la base de données %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Suppression d’une rangée dans la table de la base de données %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Mise à jour d’une rangée dans la table de la base de données %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Rafraîchissement du template %s',
+	'THEME_CACHE_PURGE'				=> 'Rafraîchissement du thème %s',
+
+	'UNINSTALL'						=> 'Désinstaller',
+	'UNINSTALL_MOD'					=> 'Désinstaller %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Êtes-vous prêt à désinstaller %s ? Tous les réglages et toutes les données sauvegardées par ce MOD seront supprimés !',
+	'UNKNOWN'						=> 'Inconnu',
+	'UPDATE_MOD'					=> 'Mettre à jour %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Êtes-vous prêt à mettre à jour %s ?',
+	'UPDATE_UMIL'					=> 'Cette version d’UMIL n’est pas à jour.<br /><br />Veuillez télécharger la dernière version d’UMIL sur : <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Version du MOD : <strong>%1$s</strong><br />Actuellement installée : <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Sélectionnez la version',
+	'VERSION_SELECT_EXPLAIN'		=> 'Ne modifiez pas “ignorer” sauf si vous savez ce que vous faites.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/fr_x_tu/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,148 @@
+<?php
+/**
+ * This file is part of French (Casual Honorifics) UMIL translation.
+ * Copyright (C) 2010 phpBB.fr
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * @package   umil
+ * @author    Maël Soucaze <maelsoucaze@phpbb.fr> (Maël Soucaze) http://www.phpbb.fr/
+ * @author    EXreaction <N/A> (Nathan Guse) http://lithiumstudios.org
+ * @author    Highway of Life <highwayoflife@gmail.com> (David Lewis) N/A
+ * @copyright 2010 phpBB.fr
+ * @copyright 2008 phpBB Group
+ * @license   http://opensource.org/licenses/gpl-license.php GNU General Public License
+ * @version   $Id: umil.php 207 2010-03-14 16:27:00Z exreaction $
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Action',
+	'ADVANCED'						=> 'Avancé',
+	'AUTH_CACHE_PURGE'				=> 'Purgation du cache d’authentification',
+
+	'CACHE_PURGE'					=> 'Purgation du cache de ton forum',
+	'CONFIGURE'						=> 'Configurer',
+	'CONFIG_ADD'					=> 'Ajout d’une nouvelle variable de configuration : %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'ERREUR : la variable de configuration %s existe déjà.',
+	'CONFIG_NOT_EXIST'				=> 'ERREUR : la variable de configuration %s n’existe pas.',
+	'CONFIG_REMOVE'					=> 'Suppression d’une variable de configuration : %s',
+	'CONFIG_UPDATE'					=> 'Mise à jour d’une variable de configuration : %s',
+
+	'DISPLAY_RESULTS'				=> 'Afficher tous les résultats',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Sélectionne “oui” afin d’afficher toutes les actions et tous les résultats durant l’action demandée.',
+
+	'ERROR_NOTICE'					=> 'Une ou plusieurs erreurs sont survenues lors de la réalisaton de l’action demandée. Télécharge <a href="%1$s">ce fichier</a> listant les erreurs et demande de l’aide à l’auteur du MOD.<br /><br />Si tu éprouves des difficultés à télécharger ce fichier, télécharge-le directement par FTP en cliquant sur le lien suivant : %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Une ou plusieurs erreurs sont survenues lors de la réalisaton de l’action demandée. Procède à un enregistrement complet de toutes les erreurs et demande de l’aide à l’auteur du MOD.',
+
+	'FAIL'							=> 'Échec',
+	'FILE_COULD_NOT_READ'			=> 'ERREUR : il n’a pas été possible d’ouvrir le fichier %s afin de le lire.',
+	'FOUNDERS_ONLY'					=> 'Tu dois être un fondateur du forum afin d’accéder à cette page.',
+
+	'GROUP_NOT_EXIST'				=> 'Le groupe n’existe pas',
+
+	'IGNORE'						=> 'Ignorer',
+	'IMAGESET_CACHE_PURGE'			=> 'Rafraîchir l’archive d’images %s',
+	'INSTALL'						=> 'Installer',
+	'INSTALL_MOD'					=> 'Installer %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Es-tu prêt à installer %s ?',
+
+	'MODULE_ADD'					=> 'Ajout du module %1$s : %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'ERREUR : le module existe déjà.',
+	'MODULE_NOT_EXIST'				=> 'ERREUR : le module n’existe pas.',
+	'MODULE_REMOVE'					=> 'Suppression du module %1$s : %2$s',
+
+	'NONE'							=> 'Aucun',
+	'NO_TABLE_DATA'					=> 'ERREUR : aucune donnée n’a été spécifiée dans la table',
+
+	'PARENT_NOT_EXIST'				=> 'ERREUR : la catégorie parent spécifiée pour ce module n’existe pas.',
+	'PERMISSIONS_WARNING'			=> 'Les réglages de la nouvelle permission ont été ajoutés. Assure-toi de vérifier les réglages de ta permission afin qu’ils soient exactement comme tu le souhaites.',
+	'PERMISSION_ADD'				=> 'Ajout d’une nouvelle option de permission : %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'ERREUR : l’option de permission %s existe déjà.',
+	'PERMISSION_NOT_EXIST'			=> 'ERREUR : l’option de permission %s n’existe pas.',
+	'PERMISSION_REMOVE'				=> 'Suppression d’une option de permission : %s',
+	'PERMISSION_ROLE_ADD'			=> 'Ajout d’un nouveau rôle de permission : %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Mise à jour d’un rôle de permission : %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Suppression d’un rôle de permission : %s',
+	'PERMISSION_SET_GROUP'			=> 'Régler les permissions du groupe %s.',
+	'PERMISSION_SET_ROLE'			=> 'Régler les permissions du rôle %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Dérégler les permissions du groupe %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Dérégler les permissions du rôle %s.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Le rôle de permission existe déjà.',
+  'ROLE_NOT_EXIST'				=> 'Le rôle n’existe pas',
+
+	'SUCCESS'						=> 'Succès',
+
+	'TABLE_ADD'						=> 'Ajout d’une nouvelle table à la base de données : %s',
+	'TABLE_ALREADY_EXISTS'			=> 'ERREUR : la table de la base de données %s existe déjà.',
+	'TABLE_COLUMN_ADD'				=> 'Ajout d’une nouvelle colonne nommée %2$s à la table %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'ERREUR : la colonne %2$s existe déjà dans la table %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'ERREUR : la colonne %2$s n’existe pas dans la table %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Suppression de la colonne nommée %2$s de la table %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Mise à jour de la colonne nommée %2$s de la table %1$s',
+	'TABLE_KEY_ADD'					=> 'Ajout d’une clé nommée %2$s à la table %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'ERREUR : l’index %2$s existe déjà dans la table %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'ERREUR : l’index %2$s n’existe pas dans la table %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Suppression de la clé nommée %2$s de la table %1$s',
+	'TABLE_NOT_EXIST'				=> 'ERREUR : la table de la base de données %s n’existe pas.',
+	'TABLE_REMOVE'					=> 'Suppression d’une table de la base de données : %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Insertion de données dans la table de la base de données %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Suppression d’une rangée dans la table de la base de données %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Mise à jour d’une rangée dans la table de la base de données %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Rafraîchissement du template %s',
+	'THEME_CACHE_PURGE'				=> 'Rafraîchissement du thème %s',
+
+	'UNINSTALL'						=> 'Désinstaller',
+	'UNINSTALL_MOD'					=> 'Désinstaller %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Es-tu prêt à désinstaller %s ? Tous les réglages et toutes les données sauvegardées par ce MOD seront supprimés !',
+	'UNKNOWN'						=> 'Inconnu',
+	'UPDATE_MOD'					=> 'Mettre à jour %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Es-tu prêt à mettre à jour %s ?',
+	'UPDATE_UMIL'					=> 'Cette version d’UMIL n’est pas à jour.<br /><br />Télécharge la dernière version d’UMIL sur : <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Version du MOD : <strong>%1$s</strong><br />Actuellement installée : <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Sélectionne la version',
+	'VERSION_SELECT_EXPLAIN'		=> 'Ne modifie pas “ignorer” sauf si tu sais ce que tu fais.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/he/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,133 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 223 2010-05-31 01:07:59Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @translated by ttuu
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'פעולה',
+	'ADVANCED'						=> 'מתקדם',
+	'AUTH_CACHE_PURGE'				=> 'טהר את המטמון',
+
+	'CACHE_PURGE'					=> 'מנקה את מטמון הפורום',
+	'CONFIGURE'						=> 'הגדרות',
+	'CONFIG_ADD'					=> 'הוספת משתנה הגדרה חדש: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'שגיאה: משתנה ההגדרה %s כבר קיים.',
+	'CONFIG_NOT_EXIST'				=> 'שגיאה: משתנה ההגדרה %s לא קיים.',
+	'CONFIG_REMOVE'					=> 'הסרת משתנה הגדרה: %s',
+	'CONFIG_UPDATE'					=> 'עדכון משתנה הגדרה: %s',
+
+	'DISPLAY_RESULTS'				=> 'הצג תוצאות מלאות',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'סמן כן על מנת לראות את כל הפעולות ואת התוצאות המפורטות של כל פעולה.',
+
+	'ERROR_NOTICE'					=> 'אירעה שגיאה אחת או יותר בעת ביצוע המשימה.  אנא הורד <a href="%1$s">קובץ זה</a> של רשימת השגיאות ושאל את מפתח המוד לגביהם.<br /><br />אם אתה מתקשה בהורדת הקובץ ישירות מכאן תוכל לעשות זאת דרך ממשק ה FTP הקובץ נמצא במיקום הבא: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'אירעה שגיאה אחת או יותר בעת ביצוע המשימה. אנא שמור העתק של השגיאות המופיעות ושאל את מפתח המוד לגביהם.',
+
+	'FAIL'							=> 'נכשל',
+	'FILE_COULD_NOT_READ'			=> 'שגיאה: לא הצליח לפתוח את הקובץ %s לקריאה.',
+	'FOUNDERS_ONLY'					=> 'עליך להיות מחובר כמייסד כדי לגשת לדף זה.',
+
+	'GROUP_NOT_EXIST'				=> 'קבוצה לא נמצאה',
+
+	'IGNORE'						=> 'התעלם',
+	'IMAGESET_CACHE_PURGE'			=> 'מרענן את ערכת התמונות %s',
+	'INSTALL'						=> 'התקן',
+	'INSTALL_MOD'					=> 'התקן %s',
+	'INSTALL_MOD_CONFIRM'			=> 'אתה מוכן להתקנת %s?',
+
+	'MODULE_ADD'					=> 'הוספת מוד %1$s: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'שגיאה: המוד כבר קיים.',
+	'MODULE_NOT_EXIST'				=> 'שגיאה: המוד לא קיים.',
+	'MODULE_REMOVE'					=> 'הסרת מוד %1$s: %2$s',
+
+	'NONE'							=> 'ללא',
+	'NO_TABLE_DATA'					=> 'שגיאה: לא הוגדרה טבלת נתונים',
+
+	'PARENT_NOT_EXIST'				=> 'שגיאה: קטגוריית ההורדה למוד זה לא קיימת.',
+	'PERMISSIONS_WARNING'			=> 'הרשאה חדשה נוספה. בדוק בבקשה את הגדרות ההרשאה שלך וודא שהם כפי שאתה רוצה אותם.',
+	'PERMISSION_ADD'				=> 'הוספת הרשאה חדשה: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'שגיאה: ההרשאה %s כבר קיימת.',
+	'PERMISSION_NOT_EXIST'			=> 'שגיאה: ההרשאה %s לא קיימת.',
+	'PERMISSION_REMOVE'				=> 'הסרת הרשאה: %s',
+	'PERMISSION_ROLE_ADD'			=> 'הוספת חוק הרשאה: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'עדכון חוק הרשאה: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'הסרת חוק הרשאה: %s',
+	'PERMISSION_SET_GROUP'			=> 'הגדרת הרשאה לקבוצה %s.',
+	'PERMISSION_SET_ROLE'			=> 'הגדרת הרשאה לחוק %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'בטל הרשאה לקבוצה %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'בטל הרשאה לחוק %s.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'חוק ההרשאה כבר קיים.',
+	'ROLE_NOT_EXIST'				=> 'חוק ההרשאה לא קיים',
+
+	'SUCCESS'						=> 'הצליח',
+
+	'TABLE_ADD'						=> 'הוספת טבלה חדשה למסד הנתונים: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'שגיאה: טבלת הנתונים %s כבר קיימת.',
+	'TABLE_COLUMN_ADD'				=> 'הוספת עמודה חדשה בשם %2$s לטבלה %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'שגיאה: העמודה %2$s בטבלה %1$s כבר קיימת.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'שגיאה: העמודה %2$s בטבלה %1$s אינה קיימת.',
+	'TABLE_COLUMN_REMOVE'			=> 'הסרת עמודה בשם %2$s מהטבלה %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'עדכון עמודה בשם %2$s בטבלה %1$s',
+	'TABLE_KEY_ADD'					=> 'הוספת מפתח בשם %2$s לטבלה %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'שגיאה: האינדקס %2$s בטבלה %1$s כבר קיים.',
+	'TABLE_KEY_NOT_EXIST'			=> 'שגיאה: האינדקס %2$s בטבלה %1$s לא קיים.',
+	'TABLE_KEY_REMOVE'				=> 'הסרת מפתח בשם %2$s מהטבלה %1$s',
+	'TABLE_NOT_EXIST'				=> 'שגיאה: טבלת הנתונים %s לא קיימת.',
+	'TABLE_REMOVE'					=> 'הסרת טבלה ממסד הנתונים: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'הזנת נתונים לטבלה %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'הסרת שורה מהטבלה %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'עדכן שורה בטבלה %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'רענון העיצוב %s',
+	'THEME_CACHE_PURGE'				=> 'רענון הסגנון %s',
+
+	'UNINSTALL'						=> 'הסר',
+	'UNINSTALL_MOD'					=> 'הסר %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'אתה מוכן להסרת %s?  כל ההגדרות והמידע השמור של מצוד זה ימחקו!',
+	'UNKNOWN'						=> 'לא ידוע',
+	'UPDATE_MOD'					=> 'עדכן %s',
+	'UPDATE_MOD_CONFIRM'			=> 'אתה מוכן לעדכון %s?',
+	'UPDATE_UMIL'					=> 'גירסת UMIL אינה עדכנית.<br /><br />הורד בבקשה את הגירסה האחרונה של UMIL (Unified MOD Install Library) מ: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'גירסת מוד: <strong>%1$s</strong><br />כעת מותקן: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'בחר גירסה',
+	'VERSION_SELECT_EXPLAIN'		=> 'אל תשנה את ההגדרה “התעלם” אלא אם אתה יודע מה אתה עושה ואת משמעות הדבר.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/hr/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,132 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 207 2010-03-14 16:27:00Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Akcija',
+	'ADVANCED'						=> 'Napredno',
+	'AUTH_CACHE_PURGE'				=> 'Brisanje autorizacijske privremene memorije',
+
+	'CACHE_PURGE'					=> 'Brisanje privremene memorije foruma',
+	'CONFIGURE'						=> 'Postavi',
+	'CONFIG_ADD'					=> 'Dodavanje nove konfiguracijske varijable: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'GREŠKA: Konfiguracijska varijabla %s već postoji.',
+	'CONFIG_NOT_EXIST'				=> 'GREŠKA: Konfiguracijska varijabla %s ne postoji.',
+	'CONFIG_REMOVE'					=> 'Uklanjanje konfiguracijske varijable: %s',
+	'CONFIG_UPDATE'					=> 'Ažuriranje konfiguracijske varijable: %s',
+
+	'DISPLAY_RESULTS'				=> 'Prikaži potpune rezultate',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Odaberi Da za prikaz svih radnji i rezultata tijekom provođenja zahtijevane radnje.',
+
+	'ERROR_NOTICE'					=> 'Dogodila se jedna ili više grešaka prilikom provođenja zahtijevane radnje.  Molimo da se skine <a href="%1$s">ova datoteka</a> sa popisom greški i zatim kontaktira autor moda za pomoć.<br /><br />Ukoliko imaš problema sa skidanjem datoteke, možeš joj direktno pristupiti pomoću FTP pristupa na slijedećoj lokaciji: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Dogodila se jedna ili više grešaka prilikom provođenja zahtijevane radnje.  Molimo da napravite potpuni zapis svake greške i zatim kontaktira autora moda za pomoć.',
+
+	'FAIL'							=> 'Neuspjeh',
+	'FILE_COULD_NOT_READ'			=> 'GREŠKA: Nije moguće otvoriti datoteku %s za čitanje.',
+	'FOUNDERS_ONLY'					=> 'Moraš biti osnivač/ica foruma kako bi mogao/la pristupiti ovoj stranici.',
+
+	'GROUP_NOT_EXIST'				=> 'Grupa ne postoji',
+
+	'IGNORE'						=> 'Ignoriraj',
+	'IMAGESET_CACHE_PURGE'			=> 'Osvježavanje %s seta slika',
+	'INSTALL'						=> 'Instaliraj',
+	'INSTALL_MOD'					=> 'Instaliraj %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Jesi li spreman/na na instalaciju %s?',
+
+	'MODULE_ADD'					=> 'Dodavanje %1$s modula: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'GREŠKA: Modul već postoji.',
+	'MODULE_NOT_EXIST'				=> 'GREŠKA: Modul ne postoji.',
+	'MODULE_REMOVE'					=> 'Uklanjanje %1$s modula: %2$s',
+
+	'NONE'							=> 'Ništa',
+	'NO_TABLE_DATA'					=> 'GREŠKA: Podaci iz tablice nisu specificirani',
+
+	'PARENT_NOT_EXIST'				=> 'GREŠKA: Osnovna kategorija specificirana za ovaj modul ne postoji.',
+	'PERMISSIONS_WARNING'			=> 'Postavke novih dopuštenja su dodane.  Molimo da se provjere postavke dopuštenja kako bi se osiguralo da su postavljene na željeni način.',
+	'PERMISSION_ADD'				=> 'Dodavanje opcije za novo dopuštenje: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'GREŠKA: Opcija dopuštenja %s već postoji.',
+	'PERMISSION_NOT_EXIST'			=> 'GREŠKA: Opcija dopuštenja %s ne postoji.',
+	'PERMISSION_REMOVE'				=> 'Uklanjanje opcije dopuštenja: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Dodavanje nove uloge dopuštenja: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Ažuriranje uloge dopuštenja: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Uklanjanje uloge dopuštenja: %s',
+	'PERMISSION_SET_GROUP'			=> 'Postavljanje dopuštenja za %s grupu.',
+	'PERMISSION_SET_ROLE'			=> 'Postavljanje dopuštenja za %s ulogu.',
+	'PERMISSION_UNSET_GROUP'		=> 'Uklanjanje postavki dopuštenja za %s grupu.',
+	'PERMISSION_UNSET_ROLE'			=> 'Uklanjanje dopuštenja za %s ulogu.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Uloga dopuštenja već postoji.',
+	'ROLE_NOT_EXIST'				=> 'Uloga dopuštenja ne postoji',
+
+	'SUCCESS'						=> 'Uspjeh',
+
+	'TABLE_ADD'						=> 'Dodavanje nove tablice unutar baze podataka: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'GREŠKA: Tablica baze podataka %s već postoji.',
+	'TABLE_COLUMN_ADD'				=> 'Dodavanje novog stupca pod nazivom %2$s u tablicu %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'GREŠKA: Stupac %2$s već postoji unutar tablice %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'GREŠKA: Stupac %2$s ne postoji unutar tablice %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Uklanjanje stupca pod nazivom %2$s iz tablice %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Ažuriranje stupca pod nazivom %2$s iz tablice %1$s',
+	'TABLE_KEY_ADD'					=> 'Dodavanje ključa pod nazivom %2$s unutar tablice %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'GREŠKA: Indeks %2$s već postoji unutar tablice %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'GREŠKA: Indeks %2$s ne postoji unutar tablice %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Uklanjanje ključa pod nazivom %2$s iz tablice %1$s',
+	'TABLE_NOT_EXIST'				=> 'GREŠKA: Tablica baze podataka %s ne postoji.',
+	'TABLE_REMOVE'					=> 'Uklanjanje tablice baze podataka: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Umetanje podataka u %s tablicu baze podataka.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Uklanjanje reda iz %s tablice baze podataka',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Ažuriranje reda u %s tablici baze podataka.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Osvježavanje %s predloška',
+	'THEME_CACHE_PURGE'				=> 'Osvježavanje %s teme',
+
+	'UNINSTALL'						=> 'Deinstaliraj',
+	'UNINSTALL_MOD'					=> 'Deinstaliraj %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Jesi li spreman/na deinstalirati %s?  Sve postavke i podaci pohranjeni od strane ovog moda će biti uklonjeni!',
+	'UNKNOWN'						=> 'Nepoznato',
+	'UPDATE_MOD'					=> 'Ažuriraj %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Jesi li spreman/na ažurirati %s?',
+	'UPDATE_UMIL'					=> 'Ova verzija UMIL-a je zastarjela.<br /><br />Molimo da skineš posljednju verziju UMIL-a (Unified MOD Install Library) sa: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Verzija MOD-a: <strong>%1$s</strong><br />Trenutno instalirana: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Odabir verzije',
+	'VERSION_SELECT_EXPLAIN'		=> 'Ne mijenjaj iz “Ignoriraj” ukoliko ne znaš točno što radiš ili ti je rečeno da to učiniš.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/hu/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,133 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 209 2010-03-15 17:54:27Z exreaction $
+ * @copyright (c) 2010 „Magyar phpBB Közösség fordítók”
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * Original copyright: (c) 2008 phpBB Group
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Művelet', //? A végrehajtás lehet, hogy jobb lenne, de mivel ami itt meg van adva, annak úgy sincs semmi hatása, a kérdés tárgytalan (a phpBB nyelvi csomagjának azonos nevű eleme van használva)
+	'ADVANCED'						=> 'Haladó beállítás',
+	'AUTH_CACHE_PURGE'				=> 'Jogosultság gyorsítótár kiürítése',
+
+	'CACHE_PURGE'					=> 'Fórum gyorsítótárának kiürítése',
+	'CONFIGURE'						=> 'Konfiguráció',
+	'CONFIG_ADD'					=> 'Új konfigurációs változó hozzáadása: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'HIBA: A %s konfigurációs változó már létezik.',
+	'CONFIG_NOT_EXIST'				=> 'HIBA: A %s konfigurációs változó nem létezik.',
+	'CONFIG_REMOVE'					=> 'Konfigurációs változó törlése: %s',
+	'CONFIG_UPDATE'					=> 'Konfigurációs változó frissítése: %s',
+
+	'DISPLAY_RESULTS'				=> 'Eredmények részletes megjelenítése',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Ha igenre állítod, az összes művelet és azok eredményei is megjelennek a végrehajtás közben.',
+
+	'ERROR_NOTICE'					=> 'A kért művelet végrehajtása közben hiba lépett fel.  Kérünk, töltsd le <a href="%1$s">ezt az állományt</a>, amely tartalmazza a hibákat, és fordulj a MOD szerzőjéhez segítségért.<br /><br />Ha nem sikerülne letöltened közvetlenül az állományt, a következő helyen elérheted FTP-n keresztül: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'A kért művelet végrehajtása közben hiba lépett fel.  Kérünk, jegyezd fel a hibákat, és fordulj a MOD szerzőjéhez segítségért.',
+
+	'FAIL'							=> 'Sikertelen',
+	'FILE_COULD_NOT_READ'			=> 'HIBA: Nem sikerült megnyitni a %s állományt olvasás céljából.',
+	'FOUNDERS_ONLY'					=> 'Csak alapító státuszú felhasználók férhetnek hozzá ehhez az oldalhoz.',
+
+	'GROUP_NOT_EXIST'				=> 'A csoport nem létezik.',
+
+	'IGNORE'						=> 'Alapértelmezett', //? Remélem nem használják máshol, mert ez a kifejezés az eredeti helyére jobban passzol
+	'IMAGESET_CACHE_PURGE'			=> '%s képkészlet újratöltése',
+	'INSTALL'						=> 'Telepítés',
+	'INSTALL_MOD'					=> '%s telepítése',
+	'INSTALL_MOD_CONFIRM'			=> 'Biztosan telepíteni akarod a %s-ot?',
+
+	'MODULE_ADD'					=> '%1$s modul hozzáadása: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'HIBA: A modul már létezik.',
+	'MODULE_NOT_EXIST'				=> 'HIBA: A modul nem létezik.',
+	'MODULE_REMOVE'					=> '%1$s modul eltávolítása: %2$s',
+
+	'NONE'							=> 'Nincs',
+	'NO_TABLE_DATA'					=> 'HIBA: Nincsenek megadva tábla adatok.',
+
+	'PARENT_NOT_EXIST'				=> 'HIBA: A modulnak megadott szülő kategória nem létezik.',
+	'PERMISSIONS_WARNING'			=> 'Új jogosultság beállítások kerültek hozzáadásra.  Feltétlenül ellenőrizd a jogosultság beállításaid, és győződj meg róla, hogy jól vannak beállítva.',
+	'PERMISSION_ADD'				=> 'Új jogosultság beállítás hozzáadása: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'HIBA: Az %s jogosultság beállítás már létezik.',
+	'PERMISSION_NOT_EXIST'			=> 'HIBA: Az %s jogosultság beállítás nem létezik.',
+	'PERMISSION_REMOVE'				=> 'Jogosultság beállítás eltávolítása: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Új jogosultság szerep hozzáadása: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Jogosultság szerep frissítése: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Jogosultság szerep eltávolítása: %s',
+	'PERMISSION_SET_GROUP'			=> '%s csoport jogosultságainak beállítása',
+	'PERMISSION_SET_ROLE'			=> '%s szerep jogosultságainak beállítása',
+	'PERMISSION_UNSET_GROUP'		=> '%s csoport jogosultságainak eltávolítása',
+	'PERMISSION_UNSET_ROLE'			=> '%s szerep jogosultságainak eltávolítása',
+
+	'ROLE_ALREADY_EXISTS'			=> 'A szerep már létezik.',
+	'ROLE_NOT_EXIST'				=> 'A szerep nem létezik.',
+
+	'SUCCESS'						=> 'Siker',
+
+	'TABLE_ADD'						=> 'Új adatbázis tábla létrehozása: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'HIBA: A %s adatbázis tábla már létezik.',
+	'TABLE_COLUMN_ADD'				=> 'Új oszlop (%2$s) létrehozása a %1$s táblában',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'HIBA: A %1$s tábla már rendelkezik egy %2$s oszloppal.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'HIBA: A %1$s tábla nem rendelkezik %2$s oszloppal.',
+	'TABLE_COLUMN_REMOVE'			=> '%2$s oszlop eltávolítása a %1$s táblából',
+	'TABLE_COLUMN_UPDATE'			=> '%2$s oszlop frissítése a %1$s táblában',
+	'TABLE_KEY_ADD'					=> '%2$s nevű kulcs hozzáadása a %1$s táblához',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'HIBA: A %1$s tábla már rendelkezik %2$s nevű index-szel.',
+	'TABLE_KEY_NOT_EXIST'			=> 'HIBA: A %1$s tábla nem rendelkezik %2$s nevű index-szel.',
+	'TABLE_KEY_REMOVE'				=> '%2$s nevű kulcs eltávolítása a %1$s táblából',
+	'TABLE_NOT_EXIST'				=> 'HIBA: Nem létezik %s nevű adatbázis tábla.',
+	'TABLE_REMOVE'					=> 'Adatbázis tábla eltávolítása: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Adatok beszúrása a %s adatbázis táblába.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Sor eltávolítása a %s adatbázis táblából',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Sor frissítése a %s adatbázis táblában.',
+	'TEMPLATE_CACHE_PURGE'			=> '%s sablon újratöltése',
+	'THEME_CACHE_PURGE'				=> '%s stílus újratöltésee',
+
+	'UNINSTALL'						=> 'Eltávolítás',
+	'UNINSTALL_MOD'					=> '%s eltávolítása',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Biztosan el akarod távolítani a %s-ot?  Minden, a MOD-hoz kapcsolódó beállítás és adat törlésre fog kerülni!',
+	'UNKNOWN'						=> 'Ismeretlen',
+	'UPDATE_MOD'					=> '%s frissítése',
+	'UPDATE_MOD_CONFIRM'			=> 'Biztosan frissíteni akaord a %s-ot?',
+	'UPDATE_UMIL'					=> 'A UMIL ezen verziója nem a legfrissebb.<br /><br />Kérünk, töltsd le az UMIL (Unified MOD Install Library) legújabb verzióját a következő helyről: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'MOD verzió: <strong>%1$s</strong><br />Jelenleg telepítve: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Verzió kiválasztása',
+	'VERSION_SELECT_EXPLAIN'		=> 'Ne állítsd át az értékét „Alapértelmezett”-ről, hacsak nem vagy biztos abban, amit csinálsz, vagy nem mondták, hogy tedd ezt.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/index.htm	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title></title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/it/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,134 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 207 2010-03-14 16:27:00Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ * Translated By: phpBB.it
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Azione',
+	'ADVANCED'						=> 'Avanzato',
+	'AUTH_CACHE_PURGE'				=> 'Elimina la cache',
+
+	'CACHE_PURGE'					=> 'Elimina la cache del tuo forum',
+	'CONFIGURE'						=> 'Configura',
+	'CONFIG_ADD'					=> 'Aggiunta di nuove variabili di configurazione: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'ERRORE: La variabile %s esiste già.',
+	'CONFIG_NOT_EXIST'				=> 'ERRORE: La variabile %s non esiste.',
+	'CONFIG_REMOVE'					=> 'Rimozione della variabile: %s',
+	'CONFIG_UPDATE'					=> 'Aggiornamento della variabile: %s',
+
+	'DISPLAY_RESULTS'				=> 'Mostra risultati completi',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Seleziona Sì per visualizzare tutte le azioni e i risultati durante l’azione richiesta.',
+
+	'ERROR_NOTICE'					=> 'Uno o più errori si sono verificati durante l’azione richiesta.  Scarica <a href="%1$s">questo file</a> con gli errori contenuti e chiedi assistenza all’autore della mod.<br /><br />Se hai qualche problema nello scaricare il file puoi accedere direttamente con un browser FTP al seguente indirizzo: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Uno o più errori si sono verificati durante l’azione richiesta. Fai una registrazione completa degli eventuali errori e chiedi assistenza all’autore della mod.',
+
+	'FAIL'							=> 'Fallito',
+	'FILE_COULD_NOT_READ'			=> 'ERRORE: Impossibile aprire il file %s per la lettura.',
+	'FOUNDERS_ONLY'					=> 'Devi essere un fondatore del forum per poter accedere a questa pagina.',
+
+	'GROUP_NOT_EXIST'				=> 'Gruppo non esiste',
+
+	'IGNORE'						=> 'Ignora',
+	'IMAGESET_CACHE_PURGE'			=> 'Aggiornamento %s set-immagini',
+	'INSTALL'						=> 'Installa',
+	'INSTALL_MOD'					=> 'Installa %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Sei pronto ad installare %s?',
+
+	'MODULE_ADD'					=> 'Aggiungi %1$s modulo: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'ERRORE: Modulo esiste già.',
+	'MODULE_NOT_EXIST'				=> 'ERRORE: Modulo non esiste.',
+	'MODULE_REMOVE'					=> 'Rimozione %1$s modulo: %2$s',
+
+	'NONE'							=> 'Nessuno',
+	'NO_TABLE_DATA'					=> 'ERRORE: Nessuna tabella dati è stata specificato',
+
+	'PARENT_NOT_EXIST'				=> 'ERRORE: La categoria madre per il presente modulo non esiste.',
+	'PERMISSIONS_WARNING'			=> 'Nuove impostazioni nei permessi sono state aggiunte. Assicurati di controllare le impostazioni dei permessi e vedere se sono quelli che desideri.',
+	'PERMISSION_ADD'				=> 'Opzione aggiunta di nuovi permessi: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'ERRORE: Opzione permessi %s esiste già.',
+	'PERMISSION_NOT_EXIST'			=> 'ERRORE: Opzione permessi %s non esiste.',
+	'PERMISSION_REMOVE'				=> 'Rimuovi opzione permessi: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Aggiunti nuovi ruoli permessi: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Aggiornati nuovi ruoli permessi: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Eliminati nuovi ruoli permessi: %s',
+	'PERMISSION_SET_GROUP'			=> 'Imposta permessi per il gruppo %s.',
+	'PERMISSION_SET_ROLE'			=> 'Imposta permessi per il ruolo %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Annulla permessi per il gruppo %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Annulla permessi per il ruolo %s.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Ruolo permessi già esistenti.',
+	'ROLE_NOT_EXIST'				=> 'Ruolo non esiste',
+
+	'SUCCESS'						=> 'Successo',
+
+	'TABLE_ADD'						=> 'Aggiungi una nuova tabella di database: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'ERRORE: Tabella di database %s esiste già.',
+	'TABLE_COLUMN_ADD'				=> 'Aggiunta di una nuova colonna denominata %2$s nella tabella %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'ERRORE: La colonna %2$s esiste già nella tabella %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'ERRORE: La colonna %2$s non esiste nella tabella %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Rimozione della colonna denominata %2$s dalla tabella %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Aggiornare una colonna di nome %2$s dalla tabella %1$s',
+	'TABLE_KEY_ADD'					=> 'Aggiunta di una chiave denominata %2$s alla tabella %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'ERRORE: L’indice %2$s esiste già sulla tabella %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'ERRORE: L’indice %2$s non esiste sulla tabella %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Rimozione di una chiave denominata %2$s dalla tabella %1$s',
+	'TABLE_NOT_EXIST'				=> 'ERRORE: Tabella di database %s non esiste.',
+	'TABLE_REMOVE'					=> 'Rimozione tabella di database: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Inserimento dati nella tabella di database %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Rimozione di una riga della tabella di database %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Aggiornamento di una riga nella tabella del database %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Aggiorna il template %s',
+	'THEME_CACHE_PURGE'				=> 'Aggiorna il tema %s',
+
+	'UNINSTALL'						=> 'Disinstalla',
+	'UNINSTALL_MOD'					=> 'Disinstalla %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Sei pronto a disinstallare %s? Tutte le impostazioni e i dati salvati da questa mod verranno rimossi!',
+	'UNKNOWN'						=> 'Sconosciuto',
+	'UPDATE_MOD'					=> 'Aggiorna %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Sei pronto per l’aggiornamento %s?',
+	'UPDATE_UMIL'					=> 'Questa versione di UMIL è obsoleta.<br /><br />Scarica l’ultima versione di UMIL (Unified MOD Install Library) da: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Versione Mod: <strong>%1$s</strong><br />Attualmente installata: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Seleziona versione',
+	'VERSION_SELECT_EXPLAIN'		=> 'Non cambiare l’impostazione “Ignora” a meno che tu non sappia cosa stai facendo o ti sia stato richiesto espressamente.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/ja/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,133 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @author chiron
+ * @package umil
+ * @version $Id: umil.php 207 2010-03-14 16:27:00Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Action',//@@@定義済み
+	'ADVANCED'						=> '選択',
+	'AUTH_CACHE_PURGE'				=> 'Auth キャッシュを削除',
+
+	'CACHE_PURGE'					=> 'フォーラムのキャッシュを削除',
+	'CONFIGURE'						=> '設定',
+	'CONFIG_ADD'					=> '新しい設定変数を追加中: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'エラー: 設定変数 “%s” はすでにあります。',
+	'CONFIG_NOT_EXIST'				=> 'エラー: 設定変数 “%s” はありません。',
+	'CONFIG_REMOVE'					=> '設定変数を削除中: %s',
+	'CONFIG_UPDATE'					=> '設定変数を更新中: %s',
+
+	'DISPLAY_RESULTS'				=> 'すべての結果を表示',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'すべての結果を表示する場合は “はい” を選んでください。',
+
+	'ERROR_NOTICE'					=> 'エラーが発生しました。リストされたエラーと一緒に<a href="%1$s">このファイル</a>をダウンロードして MOD 制作者に援助を求めてください。<br /><br />ファイルをダウンロードできない場合は FTP ブラウザを使って %2$s に直接アクセスしてください。',
+	'ERROR_NOTICE_NO_FILE'			=> 'エラーが発生しました。エラーの詳細を記録して MOD 制作者に援助を求めてください。',
+
+	'FAIL'							=> '失敗',
+	'FILE_COULD_NOT_READ'			=> 'エラー: %s ファイルの読み込みに失敗しました。',
+	'FOUNDERS_ONLY'					=> '掲示板の設立者以外アクセスできません。',
+
+	'GROUP_NOT_EXIST'				=> 'グループはありません',
+
+	'IGNORE'						=> '無視',
+	'IMAGESET_CACHE_PURGE'			=> '%s イメージセットを更新',
+	'INSTALL'						=> 'インストール',
+	'INSTALL_MOD'					=> '%s のインストール',
+	'INSTALL_MOD_CONFIRM'			=> '%s をインストールしますか?',
+
+	'MODULE_ADD'					=> '%1$s モジュールを追加中: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'エラー: モジュールはすでにあります。',
+	'MODULE_NOT_EXIST'				=> 'エラー: モジュールはありません。',
+	'MODULE_REMOVE'					=> '%1$s モジュールの削除中: %2$s',
+
+	'NONE'							=> 'なし',
+	'NO_TABLE_DATA'					=> 'エラー: テーブルデータがありません。',
+
+	'PARENT_NOT_EXIST'				=> 'エラー: 指定された親カテゴリはありません。',
+	'PERMISSIONS_WARNING'			=> '新しいパーミッションの設定を追加しました。パーミッションの設定を確認してください。',
+	'PERMISSION_ADD'				=> '新しいパーミッションオプションを追加中: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'エラー: パーミッションオプション “%s” はすでにあります。',
+	'PERMISSION_NOT_EXIST'			=> 'エラー: パーミッションオプション “%s” はありません。',
+	'PERMISSION_REMOVE'				=> 'パーミッションオプションを削除中: %s',
+	'PERMISSION_ROLE_ADD'			=> '新しいパーミッションロールを追加中: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'パーミッションロールを更新中: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'パーミッションロールを削除中: %s',
+	'PERMISSION_SET_GROUP'			=> '%s グループのパーミッションを設定しています。',
+	'PERMISSION_SET_ROLE'			=> '%s ロールのパーミッションを設定しています。',
+	'PERMISSION_UNSET_GROUP'		=> '%s グループのパーミッションを解除しています。',
+	'PERMISSION_UNSET_ROLE'			=> '%s ロールのパーミッションを解除しています。',
+
+	'ROLE_ALREADY_EXISTS'			=> 'パーミッションロールはすでにあります。',
+	'ROLE_NOT_EXIST'				=> 'パーミッションロールはありません',
+
+	'SUCCESS'						=> '成功',
+
+	'TABLE_ADD'						=> '新しいデータベースのテーブルを追加中: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'エラー: データベーステーブル “%s” はすでにあります。',
+	'TABLE_COLUMN_ADD'				=> '新しいカラム “%2$s” を %1$s テーブルに追加',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'エラー: %1$s テーブルに %2$s カラムはすでにあります。',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'エラー: %1$s テーブルに %2$s カラムはありません。',
+	'TABLE_COLUMN_REMOVE'			=> '%1$s テーブルの %2$s カラムを削除',
+	'TABLE_COLUMN_UPDATE'			=> '%1$s テーブルの %2$s カラムを更新',
+	'TABLE_KEY_ADD'					=> '%2$s キーを %1$s テーブルに追加',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'エラー: %1$s テーブルに %2$s キーはすでにあります。',
+	'TABLE_KEY_NOT_EXIST'			=> 'エラー: %1$s テーブルに %2$s キーはありません。',
+	'TABLE_KEY_REMOVE'				=> '%1$s テーブルの %2$s キーを削除',
+	'TABLE_NOT_EXIST'				=> 'エラー: データベーステーブル “%s” はありません。',
+	'TABLE_REMOVE'					=> 'データベースのテーブルを削除中: %s',
+	'TABLE_ROW_INSERT_DATA'			=> '%s テーブルにデータを挿入しています。',
+	'TABLE_ROW_REMOVE_DATA'			=> '%s テーブルのデータを削除しています。',
+	'TABLE_ROW_UPDATE_DATA'			=> '%s テーブルのデータを更新しています。',
+	'TEMPLATE_CACHE_PURGE'			=> '%s テンプレートを更新',
+	'THEME_CACHE_PURGE'				=> '%s テーマを更新',
+
+	'UNINSTALL'						=> 'アンインストール',
+	'UNINSTALL_MOD'					=> '%s のアンインストール',
+	'UNINSTALL_MOD_CONFIRM'			=> '%s をアンインストールしますか?関連する設定とデータはすべて削除されます!',
+	'UNKNOWN'						=> '未知の',
+	'UPDATE_MOD'					=> '%s のアップデート',
+	'UPDATE_MOD_CONFIRM'			=> '%s をアップデートしますか?',
+	'UPDATE_UMIL'					=> '現在の UMIL のバージョンが古くなっています。<br /><br /><a href="%1$s">%1$s</a> から最新の UMIL ( Unified MOD Install Library ) をダウンロードしてください。',
+
+	'VERSIONS'						=> 'MOD のバージョン: <strong>%1$s</strong><br />現在のインストール状況: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'バージョンの選択',
+	'VERSION_SELECT_EXPLAIN'		=> 'わからない場合は “無視” のままにしてください。',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/nl-x-formal/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,132 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 210 2010-03-24 00:59:20Z exreaction $
+ * @copyright (c) 2008 phpBB Group, phpBBservice.nl
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Actie',
+	'ADVANCED'						=> 'Uitgebreid',
+	'AUTH_CACHE_PURGE'				=> 'Legen van de auth-cache.',
+
+	'CACHE_PURGE'					=> 'Legen van uw forum-cache.',
+	'CONFIGURE'						=> 'Configureren',
+	'CONFIG_ADD'					=> 'Toevoegen van nieuwe config-variable: %s.',
+	'CONFIG_ALREADY_EXISTS'			=> 'FOUT: Config-variable %s bestaat al.',
+	'CONFIG_NOT_EXIST'				=> 'FOUT: Config-variable %s bestaat niet.',
+	'CONFIG_REMOVE'					=> 'Verwijderen van config-variable: %s.',
+	'CONFIG_UPDATE'					=> 'Bijwerken van config-variable: %s.',
+
+	'DISPLAY_RESULTS'				=> 'Volledige resultaten weergeven',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Kies ja als u alle acties en resultaten wilt laten weergeven tijdens de opgevraagde actie.',
+
+	'ERROR_NOTICE'					=> 'Eén of meer fouten zijn er opgetreden tijdens de opgevraagde actie. Om een lijst met alle fouten te bekijken kunt u <a href="%1$s">dit bestand</a> downloaden en vraag de MOD-auteur voor assistentie.<br /><br />Als u problemen hebt met het downloaden van het bestand, dan mag u het downloaden met een FTP-browser op de volgende locatie: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Eén of meer fouten zijn er opgetreden tijdens de opgevraagde actie. Sla alle fouten op en vraag en vraag aan de MOD-auteur assistentie.',
+
+	'FAIL'							=> 'Mislukt',
+	'FILE_COULD_NOT_READ'			=> 'FOUT: Kon het bestand %s niet openen voor te lezen.',
+	'FOUNDERS_ONLY'					=> 'U moet forumoprichter status hebben om toegang te hebben tot deze pagina.',
+
+	'GROUP_NOT_EXIST'				=> 'Groep bestaat niet.',
+
+	'IGNORE'						=> 'Negeren',
+	'IMAGESET_CACHE_PURGE'			=> 'Vernieuwen van de %s afbeeldingset.',
+	'INSTALL'						=> 'Installeren',
+	'INSTALL_MOD'					=> '%s installeren',
+	'INSTALL_MOD_CONFIRM'			=> 'Bent u klaar om %s te installeren?',
+
+	'MODULE_ADD'					=> 'Adding %1$s module: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'FOUT: Module bestaat al.',
+	'MODULE_NOT_EXIST'				=> 'FOUT: Module bestaat niet.',
+	'MODULE_REMOVE'					=> 'Removing %1$s module: %2$s',
+
+	'NONE'							=> 'Geen',
+	'NO_TABLE_DATA'					=> 'FOUT: Er was geen tabel data opgegeven.',
+
+	'PARENT_NOT_EXIST'				=> 'FOUT: De hoofdcategorie die opgegeven is voor deze module bestaat niet.',
+	'PERMISSIONS_WARNING'			=> 'Er zijn nieuwe permissieinstellingen toegevoegd. Vergeet niet om de permissieinstellingen te controleren en te kijken of ze zo zijn ingestelt naar wens.',
+	'PERMISSION_ADD'				=> 'Toevoegen van nieuwe permissie waarde: %s.',
+	'PERMISSION_ALREADY_EXISTS'		=> 'FOUT: Permissie waarde %s bestaat al.',
+	'PERMISSION_NOT_EXIST'			=> 'FOUT: Permissie waarde %s bestaat niet.',
+	'PERMISSION_REMOVE'				=> 'Verwijderen van permissie waarde: %s.',
+	'PERMISSION_ROLE_ADD'			=> 'Toevoegen van nieuwe permissierol: %s.',
+	'PERMISSION_ROLE_UPDATE'		=> 'Bijwerken van permissierol: %s.',
+	'PERMISSION_ROLE_REMOVE'		=> 'Verwijderen van permissierol: %s.',
+	'PERMISSION_SET_GROUP'			=> 'Instellen van permissies voor de %s groep.',
+	'PERMISSION_SET_ROLE'			=> 'Instellen van permissies voor de %s rol.',
+	'PERMISSION_UNSET_GROUP'		=> 'Verwijderen van permissieinstellingen van de %s groep.',
+	'PERMISSION_UNSET_ROLE'			=> 'Verwijderen van permissieinstellingen van de %s rol.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Permissierol bestaat al.',
+	'ROLE_NOT_EXIST'				=> 'Permissierol bestaat niet.',
+
+	'SUCCESS'						=> 'Gelukt',
+
+	'TABLE_ADD'						=> 'Toevoegen van nieuwe database-tabel: %s.',
+	'TABLE_ALREADY_EXISTS'			=> 'FOUT: Database-tabel %s bestaat al.',
+	'TABLE_COLUMN_ADD'				=> 'Toevoegen van nieuw veld genaamd %2$s aan de tabel %1$s.',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'FOUT: Het veld %2$s bestaat al op de tabel %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'FOUT: Het veld %2$s bestaat niet op de tabel %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Verwijderen van het veld genaamd %2$s van de tabel %1$s.',
+	'TABLE_COLUMN_UPDATE'			=> 'Bijwerken van een veld genaamd %2$s van de tabel %1$s.',
+	'TABLE_KEY_ADD'					=> 'Toevoegen van een sleutel genaamd %2$s aan de tabel %1$s.',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'FOUT: De index %2$s bestaat al op de tabel %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'FOUT: De index %2$s bestaat niet op de tabel %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Verwijderen van een sleutel genaamd %2$s van de tabel %1$s.',
+	'TABLE_NOT_EXIST'				=> 'FOUT: Database-tabel %s bestaat niet.',
+	'TABLE_REMOVE'					=> 'Verwijderen van database-tabel: %s.',
+	'TABLE_ROW_INSERT_DATA'			=> 'Toevoegen van data in de database-tabel %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Verwijderen van een rij van de database-tabel %s.',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Bijwerken van een rij in de database-tabel %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Vernieuwen van de %s template.',
+	'THEME_CACHE_PURGE'				=> 'Vernieuwen van het %s thema.',
+
+	'UNINSTALL'						=> 'Verwijderen',
+	'UNINSTALL_MOD'					=> '%s verwijderen',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Bent u klaar om %s te verwijderen? Alle instellingen en data die zijn opgeslagen door deze MOD zullen worden verwijderd!',
+	'UNKNOWN'						=> 'Onbekend',
+	'UPDATE_MOD'					=> 'Update %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Bent u klaar om %s bij te werken?',
+	'UPDATE_UMIL'					=> 'Deze versie van UMIL is niet up-to-date.<br /><br />Download de laatste UMIL (Unified MOD Install Library) op: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'MOD-versie: <strong>%1$s</strong><br />Huidige versie geïnstalleerd: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Versie selecteren',
+	'VERSION_SELECT_EXPLAIN'		=> 'Wijzig niet de “Negeren”-methode tenzei u weet wat u aan het doen bent of als u gevraagd werdt om dit te doen.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/nl/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,133 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 224 2010-06-01 02:23:47Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ * translated by phpbb.nl ( vertaalteam@phpbb.nl )
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Actie',
+	'ADVANCED'						=> 'Geavanceerd',
+	'AUTH_CACHE_PURGE'				=> 'De authcache legen',
+
+	'CACHE_PURGE'					=> 'De forumcache legen',
+	'CONFIGURE'						=> 'Configureren',
+	'CONFIG_ADD'					=> 'Bezig met het toevoegen van de nieuwe configvariabele : %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'FOUT: De configvariabele %s bestaat al.',
+	'CONFIG_NOT_EXIST'				=> 'FOUT: De configvariabele %s bestaat niet.',
+	'CONFIG_REMOVE'					=> 'Verwijderen van de configvariabele: %s',
+	'CONFIG_UPDATE'					=> 'Bezig met het bijwerken van de configvariabele: %s',
+
+	'DISPLAY_RESULTS'				=> 'Toon de volledige resultaten',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Selecteer ja om alle acties en resultaten te tonen tijdens de aangevraagde actie.',
+
+	'ERROR_NOTICE'					=> 'Er zijn één of meerdere fouten opgetreden tijdens de uitgevoerde actie. Download <a href="%1$s">dit bestand</a> met daarin alle fouten die er worden weergegeven en vraag de MOD-auteur om hulp.<br /><br />Als je problemen hebt met het downloaden van dat bestand, dan kun je het direct met een FTP-client downloaden vanaf de volgende locatie: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Eén of meer fouten zijn er opgetreden tijdens de uitgevoerde actie. Maak een volledig verslag van alle fouten en vraag de MOD-auteur voor hulp.',
+
+	'FAIL'							=> 'Mislukt',
+	'FILE_COULD_NOT_READ'			=> 'FOUT: Kon het bestand %s niet openen om te lezen.',
+	'FOUNDERS_ONLY'					=> 'Je moet eigenaarrechten hebben om deze pagina te benaderen.',
+
+	'GROUP_NOT_EXIST'				=> 'De groep bestaat niet',
+
+	'IGNORE'						=> 'Negeren',
+	'IMAGESET_CACHE_PURGE'			=> 'De afbeeldingenset %s wordt vernieuwd',
+	'INSTALL'						=> 'Installeren',
+	'INSTALL_MOD'					=> 'Installeren %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Gereed om %s te installeren?',
+
+	'MODULE_ADD'					=> 'Bezig met het toevoegen van de %1$s module: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'FOUT: De module bestaat al.',
+	'MODULE_NOT_EXIST'				=> 'FOUT: De module bestaat niet.',
+	'MODULE_REMOVE'					=> 'Bezig met het verwijderen van de %1$s module: %2$s',
+
+	'NONE'							=> 'Geen',
+	'NO_TABLE_DATA'					=> 'FOUT: Er is geen tabeldata opgegeven',
+
+	'PARENT_NOT_EXIST'				=> 'FOUT: De hoofdcategorie die is opgegeven voor deze module bestaat niet.',
+	'PERMISSIONS_WARNING'			=> 'Nieuwe permissie instellingen zijn toegevoegd. Zorg er voor dat je de permissie instellingen nakijkt en bekijk of ze zijn zoals jij ze wilt hebben.',
+	'PERMISSION_ADD'				=> 'Bezig met het toevoegen van de nieuwe permissieoptie: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'FOUT: De permissieoptie %s bestaat al.',
+	'PERMISSION_NOT_EXIST'			=> 'FOUT: De permissieoptie %s bestaat niet.',
+	'PERMISSION_REMOVE'				=> 'Bezig met het verwijderen van de permissieoptie: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Nieuwe permissierol toevoegen: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Permissierol bijwerken: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Permissierol verwijderen: %s',
+	'PERMISSION_SET_GROUP'			=> 'Permissies instellen voor de %s groep.',
+	'PERMISSION_SET_ROLE'			=> 'Bezig met het instellen van de permissies voor de %s rol.',
+	'PERMISSION_UNSET_GROUP'		=> 'Bezig met permissie-instellingen terug te draaien van de %s groep.',
+	'PERMISSION_UNSET_ROLE'			=> 'Bezig met permissie-instellingen terug te draaien van de %s rol.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'De rol bestaat al.',
+	'ROLE_NOT_EXIST'				=> 'De rol bestaat niet',
+
+	'SUCCESS'						=> 'Succes',
+
+	'TABLE_ADD'						=> 'Bezig met het toevoegen van de nieuwe tabel: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'FOUT: De tabel %s bestaat al.',
+	'TABLE_COLUMN_ADD'				=> 'Bezig met het toevoegen van de nieuwe kolom %2$s aan tabel %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'FOUT: De kolom %2$s bestaat al in de tabel %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'FOUT: De kolom %2$s bestaat niet in de tabel %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Bezig met het verwijderen van de kolom %2$s in de tabel %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Bezig met het bijwerken van de kolom %2$s in de tabel %1$s',
+	'TABLE_KEY_ADD'					=> 'Bezig met het toevoegen van de indexsleutel %2$s aan de tabel %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'FOUT: De indexsleutel %2$s bestaat al in de tabel %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'FOUT: De indexsleutel %2$s bestaat niet in de tabel %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Bezig met het verwijderen van de sleutel %2$s van de tabel %1$s',
+	'TABLE_NOT_EXIST'				=> 'FOUT: De tabel %s bestaat niet.',
+	'TABLE_REMOVE'					=> 'Bezig met het verwijderen van de tabel: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Bezig met het toevoegen van data in de %s tabel.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Bezig met het verwijderen van een rij in de %s tabel',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Bezig met bijwerken van een rij in de %s tabel.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Bezig met het vernieuwen van de %s template',
+	'THEME_CACHE_PURGE'				=> 'Bezig met het vernieuwen van het %s thema',
+
+	'UNINSTALL'						=> 'De-installeren',
+	'UNINSTALL_MOD'					=> 'De-installeren %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Gereed om %s te de-installeren? Alle instellingen en data die door deze MOD zijn opgeslagen, zullen worden verwijderd!',
+	'UNKNOWN'						=> 'Onbekend',
+	'UPDATE_MOD'					=> 'Bijwerken %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Gereed om %s bij te werken?',
+	'UPDATE_UMIL'					=> 'Deze versie van UMIL is niet up-to-date.<br /><br />Download alstublieft de laatste UMIL (Unified MOD Install Library) van: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'MOD versie: <strong>%1$s</strong><br />Momenteel geïnstalleerd: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Versie selecteren',
+	'VERSION_SELECT_EXPLAIN'		=> 'Wijzig niet de optie “negeren” tenzij je weet wat je aan het doen bent of als het je gevraagd werd om dit te doen.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/pl/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,133 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 149 2009-06-16 00:58:51Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// TRANSLATION DETAILS
+//
+// Author: Wargo
+// E-mail: wojciech.r@op.pl
+//
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” ‌
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Akcja',
+	'ADVANCED'						=> 'Zaawansowane',
+	'AUTH_CACHE_PURGE'				=> 'Czyszczenie cache uprawnień',
+
+	'CACHE_PURGE'					=> 'Czyszczenie cache forum',
+	'CONFIGURE'						=> 'Konfiguruj',
+	'CONFIG_ADD'					=> 'Dodawanie nowej zmiennej konfiguracyjnej: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'BŁĄD: zmienna konfiguracji %s już istnieje.',
+	'CONFIG_NOT_EXIST'				=> 'BŁĄD: zmienna konfiguracji %s nie istnieje.',
+	'CONFIG_REMOVE'					=> 'Usuwanie zmiennej konfiguracujnej: %s',
+	'CONFIG_UPDATE'					=> 'Aktualizowanie zmiennej konfiguracyjnej: %s',
+
+	'DISPLAY_RESULTS'				=> 'Wyświetl pełne wyniki',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Wybierz Tak, aby wyświetlać informacje na temat aktualnie wykonywanych czynności.',
+
+	'ERROR_NOTICE'					=> 'Wystąpiło jeden lub więcej błędów podczas wybranej akcji. Pobierz <a href="%1$s">ten plik</a> z listą błędów oraz skontaktuj się z autorem modyfikacji, aby uzyskać pomoc.<br /><br />Jeżeli masz problem z pobraniem tego pliku, wprowadź w przeglądarce ten link: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Wystąpiło jeden lub więcej błędów podczas wybranej akcji.  Skontaktuj się z autorem modyfikacji aby uzyskać więcej informacji.',
+
+	'FAIL'							=> 'Niepowodzenie',
+	'FILE_COULD_NOT_READ'			=> 'BŁĄD: nie mozna otworzyć pliku %s do odczytu.',
+	'FOUNDERS_ONLY'					=> 'Musisz być założycielem forum aby uzyskać dostęp do tej strony.',
+
+	'GROUP_NOT_EXIST'				=> 'Grupa nie istnieje',
+
+	'IGNORE'						=> 'Ignoruj',
+	'IMAGESET_CACHE_PURGE'			=> 'Odświeżanie zestawu obrazków: %s',
+	'INSTALL'						=> 'Instaluj',
+	'INSTALL_MOD'					=> 'Instaluj %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Czy jesteś gotowy do instalacji %s?',
+
+	'MODULE_ADD'					=> 'Dodawanie %1$s modułu: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'BŁĄD: Moduł już istnieje.',
+	'MODULE_NOT_EXIST'				=> 'BŁĄD: Moduł nie istnieje.',
+	'MODULE_REMOVE'					=> 'Usuwanie %1$s moduł: %2$s',
+
+	'NONE'							=> 'Brak',
+	'NO_TABLE_DATA'					=> 'BŁĄD: Nie ustalono zawartości tabeli',
+
+	'PARENT_NOT_EXIST'				=> 'BŁĄD: Określona główna kategoria tego modułu nie istnieje.',
+	'PERMISSIONS_WARNING'			=> 'Nowe ustawienia uprawnień zostały dodane.  Upewnij się, czy są zgodne z twoimi oczekiwaniami.',
+	'PERMISSION_ADD'				=> 'Dodawanie opcji uprawnień: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'BŁĄD: Opcja uprawnień: %s juz istnieje.',
+	'PERMISSION_NOT_EXIST'			=> 'BŁĄD:  Opcja uprawnień: %s nie istnieje.',
+	'PERMISSION_REMOVE'				=> 'Usuwanie opcji uprawnień: %s',
+	'PERMISSION_SET_GROUP'			=> 'Ustawianie uprawnień dla grupy %s.',
+	'PERMISSION_SET_ROLE'			=> 'Ustawianie uprawnień dla zestawu uprawnień %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Usuwanie uprawnień dla grupy %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Usuwanie uprawnień dla zestawu uprawnień %s.',
+
+	'ROLE_NOT_EXIST'				=> 'Zestaw uprawnien nie istnieje',
+
+	'SUCCESS'						=> 'Sukces',
+
+	'TABLE_ADD'						=> 'Dodawanie nowej tabeli w bazie danych: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'BŁĄD: Tabela %s istnieje już w bazie danych.',
+	'TABLE_COLUMN_ADD'				=> 'Dodawanie kolumny %2$s do tabeli %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'BŁĄD: Kolumna %2$s już istnieje w tabeli %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'BŁĄD: Kolumna %2$s nie istnieje w tabeli %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Usuwanie kolumny %2$s z tabeli %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Aktualizacja kolumny %2$s w tabeli %1$s',
+	'TABLE_KEY_ADD'					=> 'Dodawanie klucza %2$s do tabeli %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'BŁĄD: Indeks %2$s już istnieje w tabeli %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'BŁĄD: Indeks %2$s nie istnieje w tabeli %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Usuwanie klucza %2$s z tabeli %1$s',
+	'TABLE_NOT_EXIST'				=> 'BŁĄD: Tabela %s nie istnieje w bazie danych.',
+	'TABLE_REMOVE'					=> 'Usuwanie tabeli: %s z bazy danych',
+	'TABLE_ROW_INSERT_DATA'			=> 'Wypełnianie tabeli %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Usuwanie rekordu z tabeli %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Zmiana rekordu w tabeli %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Odświeżanie cache stylu %s',
+	'THEME_CACHE_PURGE'				=> 'Odświezanie cache motywu %s',
+
+	'UNINSTALL'						=> 'Deinstaluj',
+	'UNINSTALL_MOD'					=> 'Deinstaluj %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Czy jesteś pewien, że chcesz odinstalować %s?  Wszystkie ustawienia i dane, zapisane przez tą modyfikację, zostaną usunięte!',
+	'UNKNOWN'						=> 'Nieznany',
+	'UPDATE_MOD'					=> 'Aktualizacja %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Czy na pewno zaktualizować %s?',
+	'UPDATE_UMIL'					=> 'Ta wersja UMIL jest niekatualna.<br /><br />Proszę pobrać najnowsza wersję UMIL (Unified MOD Install Library) z: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Wersja modyfikacji: <strong>%1$s</strong><br />Aktualnie zainstalowana: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Wybieranie wersji',
+	'VERSION_SELECT_EXPLAIN'		=> 'Nie wybieraj “Ignoruj” jeżeli nie wiesz co może spowodować wybranie innej wersji.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/pt_br/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,133 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 218 2010-04-06 00:53:03Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ * @translation: http://www.phpbbrasil.com.br
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Ação',
+	'ADVANCED'						=> 'Avançado',
+	'AUTH_CACHE_PURGE'				=> 'Removendo o Cache de Autorização',
+
+	'CACHE_PURGE'					=> 'Removendo o cache do fórum',
+	'CONFIGURE'						=> 'Configuração',
+	'CONFIG_ADD'					=> 'Adicionando nova variável de configuração: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'ERRO: Variável de configuração %s já existe.',
+	'CONFIG_NOT_EXIST'				=> 'ERRO: Variável de configuração %s não existe.',
+	'CONFIG_REMOVE'					=> 'Removendo variável de configuração: %s',
+	'CONFIG_UPDATE'					=> 'Atualizando variável de configuração: %s',
+
+	'DISPLAY_RESULTS'				=> 'Mostrar resultados completos',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Selecione sim para mostrar todas as ações e resultados durante a ação requisitada.',
+
+	'ERROR_NOTICE'					=> 'Um ou mais erros ocorreram durante a ação requerida. Favor fazer download <a href="%1$s">este arquivo</a> com os erros listados e pedir ao autor do MOD por assist&ecirc;ncia.<br /><br />Se você tiver qualquer problema fazendo o download, você pode acessar diretamente o arquivo com um navegador FTP no seguinte local: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Um ou mais erros ocorreram durante a ação de pedido. Favor fazer um registro completo de qualquer erros e pedir ao autor do MOD por assit&ecirc;ncia.',
+
+	'FAIL'							=> 'Falha',
+	'FILE_COULD_NOT_READ'			=> 'ERRO: Não foi possível abrir o arquivo %s para leitura.',
+	'FOUNDERS_ONLY'					=> 'Você deve ser um fundador da comunidade para ver esta página.',
+
+	'GROUP_NOT_EXIST'				=> 'Grupo não existe',
+
+	'IGNORE'						=> 'Ignorar',
+	'IMAGESET_CACHE_PURGE'			=> 'Atualizando o %s imageset',
+	'INSTALL'						=> 'Instalar',
+	'INSTALL_MOD'					=> 'Instalar %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Você está pronto para instalar %s?',
+
+	'MODULE_ADD'					=> 'Adicionando %1$s módulo: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'ERRO: Módulo já existe.',
+	'MODULE_NOT_EXIST'				=> 'ERRO: Módulo não existe.',
+	'MODULE_REMOVE'					=> 'Removendo %1$s módulo: %2$s',
+
+	'NONE'							=> 'Nenhum',
+	'NO_TABLE_DATA'					=> 'ERRO: Nenhum conteúdo de tabela especificado',
+
+	'PARENT_NOT_EXIST'				=> 'ERRO: A categoria pai especificada para este módulo não existe.',
+	'PERMISSIONS_WARNING'			=> 'Novas propriedades de permissão foram adicionadas. Tenha certeza de checar suas propriedades de permissão e ver que elas estão como você queira.',
+	'PERMISSION_ADD'				=> 'Adicionando novas propriedades de permissão: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'ERRO: Propriedade de permissão %s já existe.',
+	'PERMISSION_NOT_EXIST'			=> 'ERRO: Propriedade de permissão %s não existe.',
+	'PERMISSION_REMOVE'				=> 'Removendo propriedade de permissão: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Adicionando nova regra de permissão: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Atualizando regra de permissão: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Removendo regra de permissão: %s',
+	'PERMISSION_SET_GROUP'			=> 'Definindo permissão para o grupo %s.',
+	'PERMISSION_SET_ROLE'			=> 'Propriedades de permissão para a regra %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Removendo propriedades de permissões para o grupo %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Removendo propriedades de permissões para a regra %s.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Regra de permissão já existe.',
+	'ROLE_NOT_EXIST'				=> 'Regra de permissão não existe',
+
+	'SUCCESS'						=> 'Sucesso',
+
+	'TABLE_ADD'						=> 'Adicionando uma nova tabela do banco de dados: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'ERRO: Tabela do banco de dados %s já existe.',
+	'TABLE_COLUMN_ADD'				=> 'Adicionando uma nova coluna chamada %2$s para tabela %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'ERRO: A coluna %2$s já existe na tabela %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'ERRO: A coluna %2$s não existe na tabela %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Removendo a coluna denominada %2$s da tabela %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Atualizando uma coluna chamada %2$s da tabela %1$s',
+	'TABLE_KEY_ADD'					=> 'Adicionando uma chave chamada %2$s para tabela %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'ERRO: O índice %2$s já existe na tabela %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'ERRO: O índice %2$s não existe na tabela %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Removendo uma chave chamada %2$s da tabela %1$s',
+	'TABLE_NOT_EXIST'				=> 'ERRO: Tabela do banco de dados %s não existe.',
+	'TABLE_REMOVE'					=> 'Removendo tabela do banco de dados: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Inserindo dados na tabela do banco de dados em %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Removendo um registro da tabela %s do banco de dados',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Atualizando um registro na tabela do banco de dados %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Atualizando o %s template',
+	'THEME_CACHE_PURGE'				=> 'Atualizando o %s theme',
+
+	'UNINSTALL'						=> 'Desinstalar',
+	'UNINSTALL_MOD'					=> 'Desinstalar %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Você está pronto para desinstalar %s? Todas propriedades e dados salvos por esta modificação será removido!',
+	'UNKNOWN'						=> 'Desconhecido',
+	'UPDATE_MOD'					=> 'Atualizar %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Você está pronto para atualizar %s?',
+	'UPDATE_UMIL'					=> 'Esta versão do UMIL está fora de data.<br /><br />Favor fazer download da última versão do UMIL (Unified MOD Install Library) em: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Mod Versão: <strong>%1$s</strong><br />Atualmente instalada: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Versão selecionada',
+	'VERSION_SELECT_EXPLAIN'		=> 'Não mude de “Ignorar” ao menos que você saiba o que está sendo feito ou que foi dito para fazer.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/ro/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,132 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 216 2010-04-04 03:29:22Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Acţiune',
+	'ADVANCED'						=> 'Avansat',
+	'AUTH_CACHE_PURGE'				=> 'Curăţă Auth Cache',
+
+	'CACHE_PURGE'					=> 'Curăţă cache-ul forumului propriu',
+	'CONFIGURE'						=> 'Configurare',
+	'CONFIG_ADD'					=> 'Adaugă o variabilă nouă de configurare: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'EROARE: Variabila de configurare %s există deja.',
+	'CONFIG_NOT_EXIST'				=> 'EROARE: Variabila de configurare %s nu există.',
+	'CONFIG_REMOVE'					=> 'Şterge variabila de configurare: %s',
+	'CONFIG_UPDATE'					=> 'Actualizează variabila de configurare: %s',
+
+	'DISPLAY_RESULTS'				=> 'Afişează rezultate complete',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Selectaţi Da pentru a afişa toate acţiunile şi rezultatele incluse în acţiunea aleasă.',
+
+	'ERROR_NOTICE'					=> 'Una sau mai multe erori au apărut la execuţia acţiunii alese.  Vă rugăm să descărcaţi <a href="%1$s">acest fişier</a> ce cuprinde erorile listate şi să luaţi legătura cu autorul MOD-ului pentru asistenţă.<br /><br />Dacă aveţi vreo problemă la descărcarea acestui fişier, puteţi să-l accesaţi direct folosind un browser FTP la adresa: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Una sau mai multe erori au apărut la execuţia acţiunii alese.  Vă rugăm să înregistraţi orice erori apărute şi să luaţi legătura cu autorul MOD-ului pentru asistenţă.',
+
+	'FAIL'							=> 'Eşuat',
+	'FILE_COULD_NOT_READ'			=> 'EROARE: Nu am putut deschide fişierul %s pentru citire.',
+	'FOUNDERS_ONLY'					=> 'Trebuie să fiţi un fondator al forumului pentru a accesa această pagina.',
+
+	'GROUP_NOT_EXIST'				=> 'Grupul nu există',
+
+	'IGNORE'						=> 'Ignoră',
+	'IMAGESET_CACHE_PURGE'			=> 'Actualizează setul de imagini %s',
+	'INSTALL'						=> 'Instalare',
+	'INSTALL_MOD'					=> 'Instalează %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Sunteţi pregătit pentru a instala %s?',
+
+	'MODULE_ADD'					=> 'Adaugă %1$s modulul: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'EROARE: Modulul există deja.',
+	'MODULE_NOT_EXIST'				=> 'EROARE: Modulul nu există.',
+	'MODULE_REMOVE'					=> 'Şterge %1$s modulul: %2$s',
+
+	'NONE'							=> 'Niciunul',
+	'NO_TABLE_DATA'					=> 'EROARE: Nu a fost specificată nicio tabelă de date',
+
+	'PARENT_NOT_EXIST'				=> 'EROARE: Categoria părinte specificată pentru acest modul nu există.',
+	'PERMISSIONS_WARNING'			=> 'Noile setări de permisiuni au fost adăugate. Verificaţi dacă setările proprii de permisiuni sunt aşa cum le doriţi.',
+	'PERMISSION_ADD'				=> 'Adaugă o nouă opţiune de permisiune: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'EROARE: Opţiunea de permisiune %s există deja.',
+	'PERMISSION_NOT_EXIST'			=> 'EROARE: Opţiunea de permisiune %s nu există.',
+	'PERMISSION_REMOVE'				=> 'Şterge opţiunea de permisiune: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Adaugă permisiunea pentru noul rol: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Actualizează permisiunea pentru rol: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Elimină permisiunea pentru rol: %s',
+	'PERMISSION_SET_GROUP'			=> 'Specifică permisiuniile pentru grupul %s.',
+	'PERMISSION_SET_ROLE'			=> 'Specifică permisiuniile pentru rolul %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Elimină permisiuniile pentru grupul %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Elimină permisiuniile pentru rolul %s.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Permisiunile pentru rol deja există.',
+	'ROLE_NOT_EXIST'				=> 'Permisiunea pentru rol nu există',
+
+	'SUCCESS'						=> 'Succes',
+
+	'TABLE_ADD'						=> 'Adaugă o tabelă nouă în baza de date: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'EROARE: Tabela %s există deja.',
+	'TABLE_COLUMN_ADD'				=> 'Adaugă o coloană nouă %2$s la tabela %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'EROARE: Coloana %2$s deja există în tabela %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'EROARE: Coloana %2$s nu există în tabela %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Şterge coloana %2$s din tabela %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Actualizează coloana %2$s din tabela %1$s',
+	'TABLE_KEY_ADD'					=> 'Adaugă cheia %2$s în tabela %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'EROARE: Indexul %2$s deja există în tabela %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'EROARE: Indexul %2$s nu există în tabela %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Şterge cheia %2$s din tabela %1$s',
+	'TABLE_NOT_EXIST'				=> 'EROARE: Tabela %s nu există.',
+	'TABLE_REMOVE'					=> 'Şterge tabela: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Adaugă date în tabela %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Şterge o înregistrare din tabela %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Actualizează o înregistrare din tabela %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Actualizează şablonul %s',
+	'THEME_CACHE_PURGE'				=> 'Actualizează tema %s',
+
+	'UNINSTALL'						=> 'Dezinstalare',
+	'UNINSTALL_MOD'					=> 'Dezinstalare %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Sunteţi sigur că vreţi să dezinstalaţi %s?  Toate setările şi datele salvate de acest MOD vor fi şterse!',
+	'UNKNOWN'						=> 'Necunoscut',
+	'UPDATE_MOD'					=> 'Actualizare %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Sunteţi pregătit să actualizaţi %s?',
+	'UPDATE_UMIL'					=> 'Această versiune UMIL este neactualizată.<br /><br />Vă rugăm să descărcaţi ultima versiune UMIL (Unified MOD Install Library) folosind: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Versiune MOD: <strong>%1$s</strong><br />Instalată curent: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Selectaţi versiunea',
+	'VERSION_SELECT_EXPLAIN'		=> 'Schimbaţi setarea “Ignoră” doar dacă ştiţi ce faceţi sau vi s-a spus ce trebuie făcut.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/ru/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,132 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 215 2010-04-04 01:38:37Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+  * Translated By: Палыч
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Действие',
+	'ADVANCED'						=> 'Дополнительно',
+	'AUTH_CACHE_PURGE'				=> 'Очистка кеша прав доступа',
+
+	'CACHE_PURGE'					=> 'Очистка кеша конференции',
+	'CONFIGURE'						=> 'Конфигурация',
+	'CONFIG_ADD'					=> 'Добавление новой переменной конфигурации: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'Ошибка: Переменная конфигурации %s уже существует.',
+	'CONFIG_NOT_EXIST'				=> 'Ошибка: Переменной конфигурации %s не существует.',
+	'CONFIG_REMOVE'					=> 'Удаление переменной конфигурации: %s',
+	'CONFIG_UPDATE'					=> 'Обновление переменной конфигурации: %s',
+
+	'DISPLAY_RESULTS'				=> 'Отображать все результаты',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Выберите ДА для отображения всех действий и результатов при их выполнении.',
+
+	'ERROR_NOTICE'					=> 'Во время выполнения произошли ошибки. Скачайте <a href="%1$s">этот файл</a> со списком ошибок и попросите автора МОДа о помощи.<br /><br />Если вы имеете проблемы со скачиванием файла, вы можете получить к нему доступ по FTP: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Во время выполнения произошли ошибки. Запишите их и попросите автора МОДа о помощи.',
+
+	'FAIL'							=> 'Отказ',
+	'FILE_COULD_NOT_READ'			=> 'Ошибка: Файл %s не доступен для чтения.',
+	'FOUNDERS_ONLY'					=> 'Вы должны иметь права основателя конференции для доступа к данной странице.',
+
+	'GROUP_NOT_EXIST'				=> 'Группа не существует',
+
+	'IGNORE'						=> 'Пропустить',
+	'IMAGESET_CACHE_PURGE'			=> 'Обновить %s набор изображений',
+	'INSTALL'						=> 'Установка',
+	'INSTALL_MOD'					=> 'Установить %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Вы готовы к установке %s?',
+
+	'MODULE_ADD'					=> 'Добавление %1$s модуля: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'Ошибка: Модуль уже существует.',
+	'MODULE_NOT_EXIST'				=> 'Ошибка: Модуля не существует.',
+	'MODULE_REMOVE'					=> 'Удаление %1$s модуля: %2$s',
+
+	'NONE'							=> 'Нет',
+	'NO_TABLE_DATA'					=> 'Ошибка: Данные таблицы не определены',
+
+	'PARENT_NOT_EXIST'				=> 'Ошибка: Указанная родительская категория для модуля не существует.',
+	'PERMISSIONS_WARNING'			=> 'Добавлены новые параметры прав доступа. Не забудьте проверить настройки прав доступа и убедиться в их корректности.',
+	'PERMISSION_ADD'				=> 'Добавлено новое право доступа: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'Ошибка: Право доступа %s уже существует.',
+	'PERMISSION_NOT_EXIST'			=> 'Ошибка: Право доступа %s не существует.',
+	'PERMISSION_REMOVE'				=> 'Удаление права доступа: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Добавление новой роли: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'Обновление роли: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Удаление роли: %s',
+	'PERMISSION_SET_GROUP'			=> 'Установление прав доступа для группы %s.',
+	'PERMISSION_SET_ROLE'			=> 'Установление прав доступа для роли %s.',
+	'PERMISSION_UNSET_GROUP'		=> 'Сброс прав доступа для группы %s.',
+	'PERMISSION_UNSET_ROLE'			=> 'Сброс прав доступа для роли %s.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'Роль уже существует.',
+	'ROLE_NOT_EXIST'				=> 'Роль не существует',
+
+	'SUCCESS'						=> 'Успешно',
+
+	'TABLE_ADD'						=> 'Добавление новой таблицы: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'Ошибка: Таблица %s уже существует.',
+	'TABLE_COLUMN_ADD'				=> 'Добавление нового поля %2$s в таблицу %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'Ошибка: Поле %2$s уже существует в таблице %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'Ошибка: Поле %2$s не существует в таблице %1$s.',
+	'TABLE_COLUMN_REMOVE'			=> 'Удаление поля %2$s из таблицы %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Обновление поля %2$s в таблице %1$s',
+	'TABLE_KEY_ADD'					=> 'Добавление индекса %2$s в таблицу %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'Ошибка: Индекс %2$s уже существует в таблице %1$s.',
+	'TABLE_KEY_NOT_EXIST'			=> 'Ошибка: Индекс %2$s не существует в таблице %1$s.',
+	'TABLE_KEY_REMOVE'				=> 'Удаление индекса %2$s из таблицы %1$s',
+	'TABLE_NOT_EXIST'				=> 'Ошибка: Таблица %s не существует.',
+	'TABLE_REMOVE'					=> 'Удаление таблицы: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Вставка данных в таблицу %s.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Удаление строки из таблицы %s',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Обновление строки в таблице %s.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Обновление шаблонов %s',
+	'THEME_CACHE_PURGE'				=> 'Обновление темы %s',
+
+	'UNINSTALL'						=> 'Деинсталяция',
+	'UNINSTALL_MOD'					=> 'Деинсталяция %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Вы готовы к деинсталяции %s? Все настройки и данные для этого МОДа будут удалены!',
+	'UNKNOWN'						=> 'Неизвестно',
+	'UPDATE_MOD'					=> 'Обновить %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Вы готовы обновить %s?',
+	'UPDATE_UMIL'					=> 'Эта версия UMIL устарела.<br /><br />Скачайте новейшую версию UMIL (Unified MOD Install Library): <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Версия МОДа: <strong>%1$s</strong><br />Установлено: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Выбор версии',
+	'VERSION_SELECT_EXPLAIN'		=> 'Не меняйте установки на Пропустить, если только вы не уверены в своих действиях, или об этом не говорилось прямо.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/sk/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,135 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 207 2010-03-14 16:27:00Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ * Translated By:
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Akcia',
+	'ADVANCED'						=> 'Pokročilé',
+	'AUTH_CACHE_PURGE'				=> 'Prečisťovanie autorizačnej cache',
+
+	'CACHE_PURGE'					=> 'Prečisťovanie cache vášho fóra',
+	'CONFIGURE'						=> 'Nastaviť',
+	'CONFIG_ADD'					=> 'Pridávanie novej konfiguračnej premennej: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'CHYBA: Konfiguračná premenná %s už existuje.',
+	'CONFIG_NOT_EXIST'				=> 'CHYBA: Konfiguračná premenná %s neexistuje.',
+	'CONFIG_REMOVE'					=> 'Odstraňovanie konfiguračnej premennej: %s',
+	'CONFIG_UPDATE'					=> 'Aktualizovanie konfiguračnej premennej: %s',
+
+	'DISPLAY_RESULTS'				=> 'Zobraziť celé výsledky',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'Vyberte áno pre zobrazenie všetkých akcií a výsledkov počas požadovanej akcie.',
+
+	'ERROR_NOTICE'					=> 'Jedna alebo viac chýb sa vyskytlo počas požadovanej akcie.  Prosím stiahnite <a href="%1$s">tento súbor</a> zo zoznamom chýb a opýtajte sa autora MODu čo s tým.<br /><br />Ak máte nejaké problémy so stiahnutím tohto súboru, môžete ho tiež získať prístupom priamo na FTP na toto umiestnenie: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'Jedna alebo viac chýb sa vyskytlo počas požadovanej akcie.  Prosím, urobnte celý záznam každej chyby a opýtajte sa autora MODu čo s tým.',
+
+	'FAIL'							=> 'Zlyhanie',
+	'FILE_COULD_NOT_READ'			=> 'CHYBA: Nedá sa otvoriť súbor %s pre čítanie.',
+	'FOUNDERS_ONLY'					=> 'Musíte byť zakladateľom fóra pre prístup na túto stránku.',
+
+	'GROUP_NOT_EXIST'				=> 'Skupina neexistuje',
+
+	'IGNORE'						=> 'Ignorovať',
+	'IMAGESET_CACHE_PURGE'			=> 'Obnovovanie %s sady obrázkov',
+	'INSTALL'						=> 'Inštalovať',
+	'INSTALL_MOD'					=> 'Inštalovať %s',
+	'INSTALL_MOD_CONFIRM'			=> 'Skutočne inštalovať %s?',
+
+	'MODULE_ADD'					=> 'Pridávanie %1$s modulu: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'CHYBA: Modul už existuje.',
+	'MODULE_NOT_EXIST'				=> 'CHYBA: Modul neexistuje.',
+	'MODULE_REMOVE'					=> 'Odstraňovanie %1$s modulu: %2$s',
+
+	'NONE'							=> 'Žiadny',
+	'NO_TABLE_DATA'					=> 'CHYBA: Neboli vybrané žiadne dáta tabuľky',
+
+	'PARENT_NOT_EXIST'				=> 'CHYBA: Rodičovská kategória špecifikovaná pre tento modul neexistuje.',
+	'PERMISSIONS_WARNING'			=> 'Boli pridané nové nastavenia oprávnení.  Uistite sa, že ste skontrolovali vaše oprávnenia a videli ich tak, ako majú byť.',
+	'PERMISSION_ADD'				=> 'Pridávanie novej možnosti oprávnení: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'CHYBA: Možnosť oprávnení %s už existuje.',
+	'PERMISSION_NOT_EXIST'			=> 'CHYBA: Možnosť oprávnení %s neexistuje.',
+	'PERMISSION_REMOVE'				=> 'Odstraňovanie možnosti oprávnení: %s',
+	'PERMISSION_SET_GROUP'			=> 'Nastavovanie oprávnení pre %s skupinu.',
+	'PERMISSION_SET_ROLE'			=> 'Nastavenie oprávnení pre %s rolu.',
+	'PERMISSION_UNSET_GROUP'		=> 'Odnastavovanie oprávnení pre %s skupinu.',
+	'PERMISSION_UNSET_ROLE'			=> 'Odnastavenie oprávnení pre %s rolu.',
+	
+	'PERMISSION_ROLE_ADD'         => 'Pridávanie novej roly oprávnení: %s',
+  'PERMISSION_ROLE_UPDATE'      => 'Aktualizovanie roly oprávnení: %s',
+  'PERMISSION_ROLE_REMOVE'      => 'Odstraňovanie roy oprávnení: %s',
+  'ROLE_ALREADY_EXISTS'         => 'Rola oprávnení už existuje.',
+
+	'ROLE_NOT_EXIST'				=> 'Rola neexistuje',
+
+	'SUCCESS'						=> 'Úspech',
+
+	'TABLE_ADD'						=> 'Pridávanie novej tabuľky databázy: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'CHYBA: Tabuľka databázy %s už existuje.',
+	'TABLE_COLUMN_ADD'				=> 'Pridávanie noveého stĺpca %2$s do tabuľky %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'CHYBA: Stĺpec %2$s v tabuľke %1$s už existuje.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'CHYBA: Stĺpec %2$s v tabuľke %1$s neexistuje.',
+	'TABLE_COLUMN_REMOVE'			=> 'Odstra§ovanie stĺpca %2$s z tabuľky %1$s',
+	'TABLE_COLUMN_UPDATE'			=> 'Aktualizovanie stĺpca %2$s z tabuľky %1$s',
+	'TABLE_KEY_ADD'					=> 'Priávanie kĺúča %2$s do tabuľky %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'CHYBA: Index %2$s v tabuľke %1$s už existuje.',
+	'TABLE_KEY_NOT_EXIST'			=> 'CHYBA: Index %2$s v tabuľke %1$s neexistuje.',
+	'TABLE_KEY_REMOVE'				=> 'Odstraňovanie kľúča %2$s z tabuľky %1$s',
+	'TABLE_NOT_EXIST'				=> 'CHYBA: Tabuľak %s neexistuje.',
+	'TABLE_REMOVE'					=> 'Odstraňovanie databázovej tabuľky: %s',
+	'TABLE_ROW_INSERT_DATA'			=> 'Vkladanie dát do %s tabuľky.',
+	'TABLE_ROW_REMOVE_DATA'			=> 'Odstraňovanie riadku %s tabuľky',
+	'TABLE_ROW_UPDATE_DATA'			=> 'Aktualizovanie riadku %s tabuľky.',
+	'TEMPLATE_CACHE_PURGE'			=> 'Obnovovanie %s template',
+	'THEME_CACHE_PURGE'				=> 'Obnovovanie %s témy',
+
+	'UNINSTALL'						=> 'Odinštalovať',
+	'UNINSTALL_MOD'					=> 'Odinštalovať %s',
+	'UNINSTALL_MOD_CONFIRM'			=> 'Naozaj chcete odinštalovať %s?  Všetky uložené dáta z tohto MODu budú vymazané!',
+	'UNKNOWN'						=> 'Neznámy',
+	'UPDATE_MOD'					=> 'Aktualizovať %s',
+	'UPDATE_MOD_CONFIRM'			=> 'Naozaj aktualizovať %s?',
+	'UPDATE_UMIL'					=> 'Táto verzia UMIL je zastaralá.<br /><br />Prosím stiahnite najnovší UMIL (Unified MOD Install Library) z: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Verzia MODu: <strong>%1$s</strong><br />Aktuálne nainľtalovaná: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Výber verzie',
+	'VERSION_SELECT_EXPLAIN'		=> 'Nemeňte na Ignorovať pokiaľ neviete čo robíte.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/sv/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,133 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 211 2010-03-27 16:27:39Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ * Swedish transalation by phpBB-se http://www.phpbb-se.com/forum/viewtopic.php?f=33&t=6841
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'	=> 'Handling',
+	'ADVANCED'	=> 'Avancerad',
+	'AUTH_CACHE_PURGE'	=> 'Rensar authentiseringscachen',
+
+	'CACHE_PURGE'	=> 'Rensar forumcachen',
+	'CONFIGURE'	=> 'Konfigurera',
+	'CONFIG_ADD'	=> 'Lägger till ny konfigureringsvariabel: %s',
+	'CONFIG_ALREADY_EXISTS'	=> 'FEL: Konfigureringsvariabeln %s finns redan.',
+	'CONFIG_NOT_EXIST'	=> 'FEL: Konfigureringsvariabeln %s finns inte.',
+	'CONFIG_REMOVE'	=> 'Raderar konfigureringsvariabel: %s',
+	'CONFIG_UPDATE'	=> 'Uppdaterar konfigureringsvariabel: %s',
+
+	'DISPLAY_RESULTS'	=> 'Visa fullständiga resultat',
+	'DISPLAY_RESULTS_EXPLAIN'	=> 'Välj Ja för att visa alla åtgärder och resultat under den begärda åtgärden.',
+
+	'ERROR_NOTICE'			=> 'Ett eller flera fel inträffade när den begärda åtgärden utfördes. Ladda ned <a href="%1$s">denna fil</a> med felen som anges i den och be mod författaren om hjälp.<br /><br />Om du har några problem med att ladda ned filen kan du nå den direkt med ett FTP-program på följande plats: %2$s',
+	'ERROR_NOTICE_NO_FILE'		=> 'Ett eller flera fel inträffade när den begärda åtgärden utfördes. Gör en fullständig redogörelse för eventuella fel och be MOD-författaren om hjälp.',
+
+	'FAIL'		=> 'Misslyckades',
+	'FILE_COULD_NOT_READ'	=> ' FEL:Kunde inte öppna filen %s för läsning.',
+	'FOUNDERS_ONLY'	=> 'Du måste stå som grundare för forumet för att komma åt denna sida.',
+
+	'GROUP_NOT_EXIST'	=> 'Gruppen finns inte',
+
+	'IGNORE'	=> 'Ignorera',
+	'IMAGESET_CACHE_PURGE'		=> 'Uppdaterar bildpaketet %s',
+	'INSTALL'	=> 'Installera',
+	'INSTALL_MOD'	=> 'Installera %s',
+	'INSTALL_MOD_CONFIRM'	=> 'Är du redo att installera %s?',
+
+	'MODULE_ADD'	=> 'Lägger till %1$s modul: %2$s',
+	'MODULE_ALREADY_EXIST'	=> 'FEL: Modulen finns redan.',
+	'MODULE_NOT_EXIST'		=> 'FEL: Modulen finns inte.',
+	'MODULE_REMOVE'	=> 'Raderar %1$s modul: %2$s',
+
+	'NONE'		=> 'Ingen',
+	'NO_TABLE_DATA'		=> 'FEL: Ingen tabelldata angavs',
+
+	'PARENT_NOT_EXIST'		=> 'FEL: Den ovanstående kategorin som anges för denna modul finns inte.',
+	'PERMISSIONS_WARNING'	=> 'Nya inställningar för behörigheter har lagts till.  Var noga med att kontrollera inställningarna och se till att de pasasr forumet.',
+	'PERMISSION_ADD'	=> 'Lägger till nytt behörighetsalternativ: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'FEL: Behörighetsalternativ %s finns redan.',
+	'PERMISSION_NOT_EXIST'	=> 'FEL: Behörighetsalternativ %s finns inte.',
+	'PERMISSION_REMOVE'				=> 'Raderar behörighetsalternativ: %s',
+	'PERMISSION_ROLE_ADD'		=> 'Lägger till ny behöhighetsroll: %s',
+	'PERMISSION_ROLE_UPDATE'	=> 'Updaterar behöhighetsroll: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'Raderar behöhighetsroll: %s',
+	'PERMISSION_SET_GROUP'	=> 'Anger behörighet för gruppen %s .',
+	'PERMISSION_SET_ROLE'	=> 'Anger behörighet för rollen  %s.',
+	'PERMISSION_UNSET_GROUP'	=> 'Tar bort behörigheter för gruppen %s .',
+	'PERMISSION_UNSET_ROLE'	=> 'Tar bort behörigheter för rollen %s .',
+
+	'ROLE_ALREADY_EXISTS'	=> 'Behörighetsrollen finns redan.',
+	'ROLE_NOT_EXIST'	=> 'Rollen finns inte',
+
+	'SUCCESS'	=> 'Succé',
+
+	'TABLE_ADD'	=> 'Lägger till ny databastabell: %s',
+	'TABLE_ALREADY_EXISTS'	=> 'FEL: Databastabellen %s finns redan.',
+	'TABLE_COLUMN_ADD'	=> 'Lägger till en ny kolumn som heter %2$s till tabellen %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'FEL: Kolumnen %2$s finns redan i tabellen %1$s.',
+	'TABLE_COLUMN_NOT_EXIST'	=> 'FEL: Kolumnen %2$s finns inte i tabellen %1$s.',
+	'TABLE_COLUMN_REMOVE'	=> 'Tar bort kolumnen %2$s från tabellen %1$s',
+	'TABLE_COLUMN_UPDATE'	=> 'Uppdaterar en kolumn som heter %2$s från tabellen %1$s',
+	'TABLE_KEY_ADD'	=> 'Lägger till en nyckel med namnet %2$s till tabellen %1$s',
+	'TABLE_KEY_ALREADY_EXIST'	=> 'FEL: Indexet %2$s finns redan i tabellen %1$s.',
+	'TABLE_KEY_NOT_EXIST'	=> 'FEL: Indexet %2$s finns inte i tabellen %1$s.',
+	'TABLE_KEY_REMOVE'	=> 'Tar bort en nyckel med namnet %2$s från tabellen %1$s',
+	'TABLE_NOT_EXIST'	=> 'FEL: Databastabellen %s finns inte.',
+	'TABLE_REMOVE'	=> 'Tar bort Databastabellen: %s',
+	'TABLE_ROW_INSERT_DATA'	=> 'Infogar data i %s databastabellen.',
+	'TABLE_ROW_REMOVE_DATA'	=> 'Ta bort en rad i %s databastabellen',
+	'TABLE_ROW_UPDATE_DATA'	=> 'Uppdaterar en rad i %s databastabellen.',
+	'TEMPLATE_CACHE_PURGE'	=> 'Uppdaterar mallen %s ',
+	'THEME_CACHE_PURGE'	=> 'Uppdaterar temat %s ',
+
+	'UNINSTALL'	=> 'Avinstallera',
+	'UNINSTALL_MOD'	=> 'Avinstallera %s',
+	'UNINSTALL_MOD_CONFIRM'	=> 'Är du redo att avinstallera %s?  Alla inställningar och data som sparas genom denna mod kommer att tas bort!',
+	'UNKNOWN'	=> 'Okänd',
+	'UPDATE_MOD'	=> 'Uppdatera %s',
+	'UPDATE_MOD_CONFIRM'	=> 'Är du redo att uppdatera %s?',
+	'UPDATE_UMIL'	=> 'Denna version av UMIL är föråldrad.<br /><br />Ladda ned den senaste versionen av UMIL (Unified MOD Install Library) från: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'	=> 'Mod Version: <strong>%1$s</strong><br />Installerad: <strong>%2$s</strong>',
+	'VERSION_SELECT'	=> 'Välj version',
+	'VERSION_SELECT_EXPLAIN'	=> 'Ändra inte från "Ignorera" såvida du inte vet vad du gör eller blev tillsagd att göra det.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/tr/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,134 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 219 2010-04-12 17:56:12Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ * Translated By: (ESQARE) http://www.phpbbturkey.com
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> 'Eylem',
+	'ADVANCED'						=> 'Gelişmiş',
+	'AUTH_CACHE_PURGE'				=> 'Yetki Önbelleği temizleniyor',
+
+	'CACHE_PURGE'					=> 'Forumunuzun önbelleği temizleniyor',
+	'CONFIGURE'						=> 'Ayar',
+	'CONFIG_ADD'					=> 'Yeni ayar değeri ekleniyor: %s',
+	'CONFIG_ALREADY_EXISTS'			=> 'HATA: %s ayar değeri zaten mevcut.',
+	'CONFIG_NOT_EXIST'				=> 'HATA: %s ayar değeri mevcut değil.',
+	'CONFIG_REMOVE'					=> 'Ayar değeri kaldırılıyor: %s',
+	'CONFIG_UPDATE'					=> 'Ayar değeri güncelleniyor: %s',
+
+	'DISPLAY_RESULTS'				=> 'Tüm Sonuçları Görüntüle',
+	'DISPLAY_RESULTS_EXPLAIN'		=> 'İstenilen eylem sırasındaki sonuçları ve eylemlerin tümünü görüntülemek için evet seçeneği seçin.',
+
+	'ERROR_NOTICE'					=> 'İstenilen eylem sırasında bir ya da daha fazla hata meydana geldi.  Lütfen listenen hatalar ile mod yapımcısına yardım almak sebebiyle soru sormak için <a href="%1$s">bu dosyayı</a> indirin.<br /><br />Eğer bu dosyayı indirmede problem yaşıyorsanız bu yere bir FTP tarayıcı ile direkt olarak erişebilirsiniz: %2$s',
+	'ERROR_NOTICE_NO_FILE'			=> 'İstenilen eylem sırasında bir ya da daha fazla hata meydana geldi.  Lütfen hataların tam bir kaydını alın ve yardım almak için mod yapımcısına sorun.',
+
+	'FAIL'							=> 'Başarısız',
+	'FILE_COULD_NOT_READ'			=> 'HATA: Okumak için %s dosyası açılamıyor.',
+	'FOUNDERS_ONLY'					=> 'Bu sayfaya erişmek için bir mesaj panosu kurucusu olmalısınız.',
+
+	'GROUP_NOT_EXIST'				=> 'Grup bulunamıyor',
+
+	'IGNORE'						=> 'Yoksay',
+	'IMAGESET_CACHE_PURGE'			=> '%s görüntü kümesi yenileniyor',
+	'INSTALL'						=> 'Kur',
+	'INSTALL_MOD'					=> '%s MODunu Kur',
+	'INSTALL_MOD_CONFIRM'			=> '%s modunu kurmak için hazır mısınız?',
+
+	'MODULE_ADD'					=> '%1$s modülü ekleniyor: %2$s',
+	'MODULE_ALREADY_EXIST'			=> 'HATA: Modül zaten mevcut.',
+	'MODULE_NOT_EXIST'				=> 'HATA: Modül bulunamıyor.',
+	'MODULE_REMOVE'					=> '%1$s modülü kaldırılıyor: %2$s',
+
+	'NONE'							=> 'Yok',
+	'NO_TABLE_DATA'					=> 'HATA: Hiç bir tablo verisi belirtilmedi',
+
+	'PARENT_NOT_EXIST'				=> 'HATA: Bu modül için belirlenen ana kategori mevcut değil.',
+	'PERMISSIONS_WARNING'			=> 'Yeni izin ayarları eklendi.  İzin ayarlarınızı kontrol ettiğinizden ve onların istediğiniz gibi olduğundan emin olun.',
+	'PERMISSION_ADD'				=> 'Yeni izin seçeneğpi ekleniyor: %s',
+	'PERMISSION_ALREADY_EXISTS'		=> 'HATA: %s izin seçeneği zaten mevcut.',
+	'PERMISSION_NOT_EXIST'			=> 'HATA: %s izin seçeneği mevcut değil.',
+	'PERMISSION_REMOVE'				=> 'İzin seçeneği kaldırılıyor: %s',
+	'PERMISSION_ROLE_ADD'			=> 'Yeni izin rolü ekleniyor: %s',
+	'PERMISSION_ROLE_UPDATE'		=> 'İzin rolü güncelleniyor: %s',
+	'PERMISSION_ROLE_REMOVE'		=> 'İzin rolü kaldırılıyor: %s',	
+	'PERMISSION_SET_GROUP'			=> '%s grubu için izinler ayarlanıyor.',
+	'PERMISSION_SET_ROLE'			=> '%s rolü için izinler ayarlanıyor.',
+	'PERMISSION_UNSET_GROUP'		=> '%s grubu için izin ayarları kaldırılıyor.',
+	'PERMISSION_UNSET_ROLE'			=> '%s rolü için izin ayarları kaldırılıyor.',
+
+	'ROLE_ALREADY_EXISTS'			=> 'İzin rolü zaten var.',
+	'ROLE_NOT_EXIST'				=> 'İzin rolü mevcut değil',
+
+	'SUCCESS'						=> 'Başarılı',
+
+	'TABLE_ADD'						=> 'Yeni bir veritabanı tablosu ekleniyor: %s',
+	'TABLE_ALREADY_EXISTS'			=> 'HATA: %s veritabanı tablosu zaten mevcut.',
+	'TABLE_COLUMN_ADD'				=> '%1$s tablosuna %2$s isminde yeni bir sütun ekleniyor',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> 'HATA: %1$s tablosunda %2$s sütunu zaten mevcut.',
+	'TABLE_COLUMN_NOT_EXIST'		=> 'HATA: %1$s tablosunda %2$s sütunu mevcut değil.',
+	'TABLE_COLUMN_REMOVE'			=> '%1$s tablosundan %2$s ismindeki sütun kaldırılıyor',
+	'TABLE_COLUMN_UPDATE'			=> '%1$s tablosundan %2$s isimli sütun güncelleniyor',
+	'TABLE_KEY_ADD'					=> '%1$s tablosuna %2$s isminde bir anahtar ekleniyor',
+	'TABLE_KEY_ALREADY_EXIST'		=> 'HATA: %1$s tablosunda %2$s indeksi zaten mevcut.',
+	'TABLE_KEY_NOT_EXIST'			=> 'HATA: %1$s tablosunda %2$s indeksi mevcut değil.',
+	'TABLE_KEY_REMOVE'				=> '%1$s tablosundan %2$s isimli bir anahtar kaldırılıyor',
+	'TABLE_NOT_EXIST'				=> 'HATA: %s veritabanı tablosu mevcut değil.',
+	'TABLE_REMOVE'					=> 'Veritabanı tablosu kaldırılıyor: %s',
+	'TABLE_ROW_INSERT_DATA'			=> '%s veritabanı tablosuna veri ekleniyor.',
+	'TABLE_ROW_REMOVE_DATA'			=> '%s veritabanı tablosundan bir sıra kaldırılıyor',
+	'TABLE_ROW_UPDATE_DATA'			=> '%s veritabanı tablosunda bir sıra güncelleniyor.',
+	'TEMPLATE_CACHE_PURGE'			=> '%s şablonu yenileniyor',
+	'THEME_CACHE_PURGE'				=> '%s teması yenileniyor',
+
+	'UNINSTALL'						=> 'Kaldır',
+	'UNINSTALL_MOD'					=> '%s MODunu kaldır',
+	'UNINSTALL_MOD_CONFIRM'			=> '%s modunu kaldırmaya hazır mısınız?  Bu mod tarafından kaydedilen veriler ve tüm ayarlar silinecektir!',
+	'UNKNOWN'						=> 'Bilinmeyen',
+	'UPDATE_MOD'					=> '%s MODunu güncelle',
+	'UPDATE_MOD_CONFIRM'			=> '%s modunu güncellemeye hazır mısınız?',
+	'UPDATE_UMIL'					=> 'UMIL’in bu sürümü güncel değil.<br /><br />Lütfen son UMIL (Unified MOD Install Library) sürümünü şuradan indirin: <a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> 'Mod Sürümü: <strong>%1$s</strong><br />Şu an kurulu sürüm: <strong>%2$s</strong>',
+	'VERSION_SELECT'				=> 'Sürüm Seç',
+	'VERSION_SELECT_EXPLAIN'		=> 'Ne yapacağınızı bilmedikçe ya da söylenmedikçe “Yoksay” seçeneğini değiştirmeyin.',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/language/zh_cmn_hant/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,132 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 208 2010-03-15 02:03:13Z exreaction $
+ * @copyright (c) 2009 phpBB-TW (心靈捕手) http://phpbb-tw.net/phpbb/
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (empty($lang) || !is_array($lang))
+{
+	$lang = array();
+}
+
+// DEVELOPERS PLEASE NOTE
+//
+// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
+//
+// Placeholders can now contain order information, e.g. instead of
+// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
+// translators to re-order the output of data while ensuring it remains correct
+//
+// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
+// equally where a string contains only two placeholders which are used to wrap text
+// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
+//
+// Some characters you may want to copy&paste:
+// ’ » “ ” …
+//
+
+$lang = array_merge($lang, array(
+	'ACTION'						=> '動作',
+	'ADVANCED'						=> '進階的',
+	'AUTH_CACHE_PURGE'				=> '清除快取',
+
+	'CACHE_PURGE'					=> '清除論壇快取',
+	'CONFIGURE'						=> '基本組態',
+	'CONFIG_ADD'					=> '正在增加新的基本組態變數:%s',
+	'CONFIG_ALREADY_EXISTS'			=> '錯誤:基本組態變數 %s 已經存在。',
+	'CONFIG_NOT_EXIST'				=> '錯誤:基本組態變數 %s 不存在。',
+	'CONFIG_REMOVE'					=> '正在移除基本組態變數:%s',
+	'CONFIG_UPDATE'					=> '正在更新基本組態變數:%s',
+
+	'DISPLAY_RESULTS'				=> '顯示完整的結果',
+	'DISPLAY_RESULTS_EXPLAIN'		=> '選擇是,以顯示期間所有要求的動作以及結果。',
+
+	'ERROR_NOTICE'					=> '期間要求的動作發生一個或多個錯誤。請下載 <a href="%s">此檔</a> 與錯誤列表,以及尋求外掛作者的協助。<br /><br />如果您有任何下載檔案的問題,那麼您可以使用 FTP 瀏覽下面的位置:%2$s 直接存取它。',
+	'ERROR_NOTICE_NO_FILE'			=> '期間要求的動作發生一個或多個錯誤。請完整記下任何失誤的記錄以及尋求外掛作者的協助。',
+
+	'FAIL'							=> '失敗',
+	'FILE_COULD_NOT_READ'			=> '錯誤:無法開啟此檔 %s 以讀取。',
+	'FOUNDERS_ONLY'					=> '您必須是論壇的創始者才被允許進入此頁。',
+
+	'GROUP_NOT_EXIST'				=> '群組不存在',
+
+	'IGNORE'						=> '忽略',
+	'IMAGESET_CACHE_PURGE'			=> '正在重新整理 %s 圖檔組',
+	'INSTALL'						=> '安裝',
+	'INSTALL_MOD'					=> '安裝 %s',
+	'INSTALL_MOD_CONFIRM'			=> '您準備要安裝 %s 嗎?',
+
+	'MODULE_ADD'					=> '正在增加 %1$s 模組:%2$s',
+	'MODULE_ALREADY_EXIST'			=> '錯誤:模組已經存在。',
+	'MODULE_NOT_EXIST'				=> '錯誤:模組不存在。',
+	'MODULE_REMOVE'					=> '正在移除 %1$s 模組:%2$s',
+
+	'NONE'							=> '尚未安裝',
+	'NO_TABLE_DATA'					=> '錯誤:沒有指定的資料表。',
+
+	'PARENT_NOT_EXIST'				=> '錯誤:這模組所指定的父類別不存在。',
+	'PERMISSIONS_WARNING'			=> '新的權限設定已被增加。請確實檢查您的權限設定,以及看看它們是否如您所想要的。',
+	'PERMISSION_ADD'				=> '正在增加新的權限選項:%s',
+	'PERMISSION_ALREADY_EXISTS'		=> '錯誤:權限選項 %s 已經存在。',
+	'PERMISSION_NOT_EXIST'			=> '錯誤:權限選項 %s 不存在。',
+	'PERMISSION_REMOVE'				=> '正在移除權限選項:%s',
+	'PERMISSION_ROLE_ADD'			=> '正在增加新的權限角色:%s',
+	'PERMISSION_ROLE_UPDATE'		=> '正在更新權限角色:%s',
+	'PERMISSION_ROLE_REMOVE'		=> '正在移除權限角色:%s',
+	'PERMISSION_SET_GROUP'			=> '正在設定 %s 群組的權限。',
+	'PERMISSION_SET_ROLE'			=> '正在設定 %s 角色的權限。',
+	'PERMISSION_UNSET_GROUP'		=> '正在移除設定 %s 群組的權限。',
+	'PERMISSION_UNSET_ROLE'			=> '正在移除設定 %s 角色的權限。',
+
+	'ROLE_ALREADY_EXISTS'			=> '權限角色已存在。',
+	'ROLE_NOT_EXIST'				=> '權限角色不存在',
+
+	'SUCCESS'						=> '成功',
+
+	'TABLE_ADD'						=> '正在增加新的資料表:%s',
+	'TABLE_ALREADY_EXISTS'			=> '錯誤:資料表 %s 已經存在。',
+	'TABLE_COLUMN_ADD'				=> '正在增加新的欄位 %2$s 到資料表 %1$s',
+	'TABLE_COLUMN_ALREADY_EXISTS'	=> '錯誤:此欄位 %2$s 已經存在於資料表 %1$s。',
+	'TABLE_COLUMN_NOT_EXIST'		=> '錯誤:此欄位 %2$s 不存在於資料表 %1$s。',
+	'TABLE_COLUMN_REMOVE'			=> '正在移除欄位 %2$s 從資料表 %1$s',
+	'TABLE_COLUMN_UPDATE'			=> '正在更新欄位 %2$s 從資料表 %1$s',
+	'TABLE_KEY_ADD'					=> '正在增加關鍵詞 %2$s 到資料表 %1$s',
+	'TABLE_KEY_ALREADY_EXIST'		=> '錯誤:此索引 %2$s 已經存在於資料表 %1$s。',
+	'TABLE_KEY_NOT_EXIST'			=> '錯誤:此索引 %2$s 不存在於資料表 %1$s。',
+	'TABLE_KEY_REMOVE'				=> '正在移除關鍵詞 %2$s 從資料表 %1$s',
+	'TABLE_NOT_EXIST'				=> '錯誤:資料表 %s 不存在。',
+	'TABLE_REMOVE'					=> '正在移除資料表:%s',
+	'TABLE_ROW_INSERT_DATA'			=> '正在插入資料表  %s 的資料',
+	'TABLE_ROW_REMOVE_DATA'			=> '正在移除資料表  %s 的欄位',
+	'TABLE_ROW_UPDATE_DATA'			=> '正在更新資料表  %s 的欄位',
+	'TEMPLATE_CACHE_PURGE'			=> '正在重新整理 %s 樣板',
+	'THEME_CACHE_PURGE'				=> '正在重新整理 %s 主題',
+
+	'UNINSTALL'						=> '移除安裝',
+	'UNINSTALL_MOD'					=> '移除安裝 %s',
+	'UNINSTALL_MOD_CONFIRM'			=> '您準備要移除安裝 %s 嗎?此外掛所有已設定以及儲存的資料都將被移除!',
+	'UNKNOWN'						=> '不知道',
+	'UPDATE_MOD'					=> '更新 %s',
+	'UPDATE_MOD_CONFIRM'			=> '您準備要更新 %s 嗎?',
+	'UPDATE_UMIL'					=> '這個 UMIL 的版本是過期的。<br /><br />請下載最新的 UMIL (Unified MOD Install Library) 從:<a href="%1$s">%1$s</a>',
+
+	'VERSIONS'						=> '外掛版本:<strong>%1$s</strong><br />目前已安裝:<strong>%2$s</strong>',
+	'VERSION_SELECT'				=> '版本選擇',
+	'VERSION_SELECT_EXPLAIN'		=> '不要改變「忽略」的設定,除非您知道您正在做甚麼或被告知怎麼做。',
+));
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/style/confirm_body.html	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,20 @@
+<!-- INCLUDE overall_header.html -->
+
+<form id="confirm" method="post" action="{S_CONFIRM_ACTION}">
+
+<fieldset>
+	<h1>{MESSAGE_TITLE}</h1>
+	<p>{MESSAGE_TEXT}</p>
+
+	{S_HIDDEN_FIELDS}
+
+	<div style="text-align: center;">
+		<input type="submit" name="confirm" value="{L_YES}" class="button2" />&nbsp; 
+		<input type="submit" name="cancel" value="{L_NO}" class="button2" />
+	</div>
+
+</fieldset>
+		
+</form>
+
+<!-- INCLUDE overall_footer.html -->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/style/index.htm	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title></title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/style/index_body.html	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,100 @@
+<!-- INCLUDE overall_header.html -->
+
+<!-- IF S_CONFIRM -->
+<form id="confirm" method="post" action="{S_CONFIRM_ACTION}">
+
+<fieldset>
+	<h1>{MESSAGE_TITLE}</h1>
+	<p>{MESSAGE_TEXT}</p>
+
+	{S_HIDDEN_FIELDS}
+
+	<div style="text-align: center;">
+		<input type="submit" name="confirm" value="{L_YES}" class="button2" />&nbsp;
+		<input type="submit" name="cancel" value="{L_NO}" class="button2" />
+	</div>
+
+</fieldset>
+
+</form>
+<!-- ENDIF -->
+
+<!-- IF .options -->
+	<h1>{L_TITLE}</h1>
+
+	<p>{L_TITLE_EXPLAIN}</p>
+
+	<!-- IF S_ERROR -->
+		<div class="errorbox">
+			<h3>{L_WARNING}</h3>
+			<p>{ERROR_MSG}</p>
+		</div>
+	<!-- ENDIF -->
+
+	<form id="umil" method="post" action="{U_ACTION}" name="umil">
+
+		<!-- BEGIN options -->
+			<!-- IF options.S_LEGEND -->
+				<!-- IF not options.S_FIRST_ROW -->
+					</fieldset>
+				<!-- ENDIF -->
+				<fieldset>
+					<legend>{options.LEGEND}</legend>
+
+			<!-- ELSE -->
+				<dl>
+					<dt><label for="{options.KEY}">{options.TITLE}:</label><!-- IF options.S_EXPLAIN --><br /><span>{options.TITLE_EXPLAIN}</span><!-- ENDIF --></dt>
+					<dd>{options.CONTENT}</dd>
+					<!-- IF options.S_FIND_USER --><dd>[ <a href="{options.U_FIND_USER}" onclick="find_username(this.href); return false;">{L_FIND_USERNAME}</a> ]</dd><!-- ENDIF -->
+				</dl>
+
+			<!-- ENDIF -->
+		<!-- END options -->
+
+		<p class="submit-buttons">
+			<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp;
+			<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
+		</p>
+		{S_HIDDEN_FIELDS}
+		{S_FORM_TOKEN}
+	</fieldset>
+	</form>
+<!-- ENDIF -->
+
+<!-- IF S_RESULTS -->
+	<h1>{L_TITLE} - <font style="color: <!-- IF S_SUCCESS -->green<!-- ELSE -->red<!-- ENDIF -->;">{L_RESULTS}</font></h1>
+
+	<br />
+
+	<p>{L_DATABASE_TYPE} :: <strong>{SQL_LAYER}</strong></p>
+
+	<!-- IF not S_SUCCESS -->
+		<div class="errorbox">
+			<h3>{L_WARNING}</h3>
+			<p>{L_ERROR_NOTICE}</p>
+		</div>
+	<!-- ENDIF -->
+
+	<!-- IF S_PERMISSIONS -->
+		<div class="errorbox">
+			<h3>{L_WARNING}</h3>
+			<p>{L_PERMISSIONS_WARNING}</p>
+		</div>
+	<!-- ENDIF -->
+
+	<!-- IF .results -->
+	<fieldset>
+		<legend></legend>
+		<!-- BEGIN results -->
+				<p>{results.COMMAND}</p>
+				<div style="color: <!-- IF results.S_SUCCESS -->green<!-- ELSE -->red<!-- ENDIF -->;">{results.RESULT}</div>
+				<!-- IF not results.S_LAST_ROW --><hr /><!-- ENDIF -->
+		<!-- END results -->
+	</fieldset>
+	<!-- ENDIF -->
+
+
+<!-- ENDIF -->
+
+
+<!-- INCLUDE overall_footer.html -->
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/style/message_body.html	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,10 @@
+<!-- INCLUDE overall_header.html -->
+
+<div <!-- IF S_USER_NOTICE -->class="successbox"<!-- ELSE -->class="errorbox"<!-- ENDIF -->>
+	<h3>{MESSAGE_TITLE}</h3>
+	<p>
+		{MESSAGE_TEXT}
+	</p>
+</div>
+
+<!-- INCLUDE overall_footer.html -->
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/style/overall_footer.html	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,21 @@
+
+					</div>
+				</div>
+			<span class="corners-bottom"><span></span></span>
+		</div>
+		</div>
+	</div>
+
+	<div id="page-footer">
+		Powered by <a href="http://www.phpbb.com/mods/umil/">UMIL</a> &copy; 2009 <a href="http://www.phpbb.com/">phpBB Group</a><br />
+		Powered by phpBB &copy; 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a><br />
+		<!-- IF TRANSLATION_INFO --><br />{TRANSLATION_INFO}<!-- ENDIF -->
+
+		<!-- IF DEBUG_OUTPUT -->
+			<br />{DEBUG_OUTPUT}
+		<!-- ENDIF -->
+	</div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/style/overall_header.html	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}" xml:lang="{S_USER_LANG}">
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset={S_CONTENT_ENCODING}" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-Language" content="{S_USER_LANG}" />
+<meta http-equiv="imagetoolbar" content="no" />
+<!-- IF META -->{META}<!-- ENDIF -->
+<title>{PAGE_TITLE}</title>
+
+<link href="{UMIL_ROOT_PATH}style/style.css" rel="stylesheet" type="text/css" media="screen" />
+
+<!-- INCLUDE parse.css -->
+
+<script type="text/javascript">
+// <![CDATA[
+
+/**
+* Find a member
+*/
+function find_username(url)
+{
+	popup(url, 760, 570, '_usersearch');
+	return false;
+}
+
+/**
+* Window popup
+*/
+function popup(url, width, height, name)
+{
+	if (!name)
+	{
+		name = '_popup';
+	}
+
+	window.open(url.replace(/&amp;/g, '&'), name, 'height=' + height + ',resizable=yes,scrollbars=yes, width=' + width);
+	return false;
+}
+
+/**
+* Set display of page element
+* s[-1,0,1] = hide,toggle display,show
+*/
+function dE(n, s, type)
+{
+	if (!type)
+	{
+		type = 'block';
+	}
+
+	var e = document.getElementById(n);
+	if (!s)
+	{
+		s = (e.style.display == '' || e.style.display == 'block') ? -1 : 1;
+	}
+	e.style.display = (s == 1) ? type : 'none';
+}
+
+// ]]>
+</script>
+
+</head>
+
+<body class="{S_CONTENT_DIRECTION}">
+<div id="wrap">
+	<div id="page-header">
+		<h1>{L_INSTALL_PANEL}</h1>
+		<p><a href="{U_ADM_INDEX}">{L_ADMIN_INDEX}</a> &bull; <a href="{U_INDEX}">{L_FORUM_INDEX}</a></p>
+		<p id="skip"><a href="#acp">{L_SKIP}</a></p>
+		<!-- IF S_LANG_SELECT -->
+		<form method="post" action="">
+			<fieldset class="nobg">
+				<label for="language">{L_SELECT_LANG}:</label>
+				{S_LANG_SELECT}
+				<input class="button1" type="submit" id="change_lang" name="change_lang" value="{L_CHANGE}" />
+			</fieldset>
+		</form>
+		<!-- ENDIF -->
+	</div>
+
+	<div id="page-body">
+		<div id="acp">
+		<div class="panel">
+			<span class="corners-top"><span></span></span>
+				<div id="content">
+					<div id="menu">
+						<ul>
+						<!-- BEGIN l_block -->
+							<li<!-- IF l_block.S_SELECTED --> id="activemenu"<!-- ENDIF -->><!-- IF l_block.U_TITLE --><a href="{l_block.U_TITLE}"><!-- ENDIF --><span<!-- IF l_block.S_COMPLETE --> class="completed"<!-- ENDIF -->>{l_block.L_TITLE}</span><!-- IF l_block.U_TITLE --></a><!-- ENDIF --></li>
+						<!-- END l_block -->
+						</ul>
+					</div>
+
+					<div id="main" class="install-body">
+
+		 <!-- IF S_BOARD_DISABLED -->
+		<div class="rules">
+			<div class="inner"><span class="corners-top"><span></span></span>
+				<strong>{L_INFORMATION}:</strong> {L_BOARD_DISABLED}
+			<span class="corners-bottom"><span></span></span></div>
+		</div>
+		<!-- ENDIF -->
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/style/parse.css	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,123 @@
+<style type="text/css">
+#page-header {
+	background: url("<!-- IF LOGO_IMG -->{LOGO_IMG}<!-- ELSE -->{ROOT_PATH}adm/images/phpbb_logo.gif<!-- ENDIF -->") top left no-repeat;
+}
+
+.rtl #page-header {
+	background: url("<!-- IF LOGO_IMG -->{LOGO_IMG}<!-- ELSE -->{ROOT_PATH}adm/images/phpbb_logo.gif<!-- ENDIF -->") top right no-repeat;
+}
+
+#tabs a {
+	background:url("{ROOT_PATH}adm/images/bg_tabs1.gif") no-repeat 0% -34px;
+}
+
+#tabs a span {
+	background: url("{ROOT_PATH}adm/images/bg_tabs2.gif") no-repeat 100% -34px;
+}
+
+.panel {
+	background: #F3F3F3 url("{ROOT_PATH}adm/images/innerbox_bg.gif") repeat-x top;
+}
+
+span.corners-top {
+	background-image: url("{ROOT_PATH}adm/images/corners_left.gif");
+}
+
+span.corners-top span {
+	background-image: url("{ROOT_PATH}adm/images/corners_right.gif");
+}
+
+span.corners-bottom {
+	background-image: url("{ROOT_PATH}adm/images/corners_left.gif");
+}
+
+span.corners-bottom span {
+	background-image: url("{ROOT_PATH}adm/images/corners_right.gif");
+}
+
+/* WinIE tweaks \*/
+* html span.corners-top, * html span.corners-bottom { background-image: url("{ROOT_PATH}adm/images/corners_left.gif"); }
+* html span.corners-top span, * html span.corners-bottom span { background-image: url("{ROOT_PATH}adm/images/corners_right.gif"); }
+/* End tweaks */
+
+#toggle-handle {
+	background-image: url({ROOT_PATH}adm/images/toggle.gif);
+}
+
+.rtl #toggle-handle {
+	background-image: url({ROOT_PATH}adm/images/toggle.gif);
+}
+
+#menu li#activemenu a:hover span, #menu li#activemenu span {
+	background: #FFFFFF url("{ROOT_PATH}adm/images/arrow_right.gif") 1% 50% no-repeat;
+}
+
+.rtl #menu li#activemenu a:hover span, .rtl #menu li#activemenu span {
+	background: #FFFFFF url("{ROOT_PATH}adm/images/arrow_left.gif") 99% 50% no-repeat;
+}
+
+	background: url("{ROOT_PATH}adm/images/arrow_down.gif") 1% 50% no-repeat;
+}
+
+.rtl #menu li span.completed {
+	background: url("{ROOT_PATH}adm/images/arrow_down.gif") 99% 50% no-repeat;
+}
+
+th {
+	background: #70AED3 url("{ROOT_PATH}adm/images/gradient2b.gif") bottom left repeat-x;
+}
+
+a.button1, input.button1, input.button3,
+a.button2, input.button2 {
+	background: #EFEFEF url("{ROOT_PATH}adm/images/bg_button.gif") repeat-x top;
+}
+
+a.button1:hover, input.button1:hover,
+a.button2:hover, input.button2:hover {
+	background: #EFEFEF url("{ROOT_PATH}adm/images/bg_button.gif") repeat bottom;
+}
+
+.permissions-category a {
+	background: url("{ROOT_PATH}adm/images/bg_tabs_alt1.gif") no-repeat 0% -35px;
+}
+
+.rtl .permissions-category a {
+	float: right;
+}
+
+.permissions-category a span.tabbg {
+	background: url("{ROOT_PATH}adm/images/bg_tabs_alt2.gif") no-repeat 100% -35px;
+}
+
+.permissions-panel span.corners-top {
+	background-image: url("{ROOT_PATH}adm/images/corners_left2.gif");
+}
+
+.permissions-panel span.corners-top span {
+	background-image: url("{ROOT_PATH}adm/images/corners_right2.gif");
+}
+
+.permissions-panel span.corners-bottom {
+	background-image: url("{ROOT_PATH}adm/images/corners_left2.gif");
+}
+
+.permissions-panel span.corners-bottom span {
+	background-image: url("{ROOT_PATH}adm/images/corners_right2.gif");
+}
+
+.permissions-panel span.corners-top {
+	background-image: url("{ROOT_PATH}adm/images/corners_left2.gif");
+}
+
+.permissions-panel span.corners-top span {
+	background-image: url("{ROOT_PATH}adm/images/corners_right2.gif");
+}
+
+.permissions-panel span.corners-bottom {
+	background-image: url("{ROOT_PATH}adm/images/corners_left2.gif");
+}
+
+.permissions-panel span.corners-bottom span {
+	background-image: url("{ROOT_PATH}adm/images/corners_right2.gif");
+}
+</style>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/style/style.css	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,1624 @@
+/*  phpBB 3.0 Admin Style Sheet
+	------------------------------------------------------------------------
+	Original author:	subBlue ( http://www.subblue.com/ )
+	Copyright 2007 phpBB Group ( http://www.phpbb.com/ )
+	------------------------------------------------------------------------
+*/
+
+/* General markup styles
+---------------------------------------- */
+* {
+	/* Reset browsers default margin, padding and font sizes */
+	margin: 0;
+	padding: 0;
+	font-size: 100%;
+}
+
+body, div, p, th, td, li, dd {
+	font-size: x-small;
+	voice-family: "\"}\"";
+	voice-family: inherit;
+	font-size: small
+}
+
+html>body, html>div, html>p, html>th, html>td, html>li, html>dd {
+	font-size: small
+}
+
+html {
+	color: #536482;
+	background: #DBD7D1;
+	/* Always show a scrollbar for short pages - stops the jump when the scrollbar appears. non-ie browsers */
+	height: 100%;
+	margin-bottom: 1px;
+}
+
+body {
+	/* Text-Sizing with ems: http://www.clagnut.com/blog/348/ */
+	font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif;
+	color: #536482;
+	background: #DBD7D1;
+	font-size: 62.5%;	/* This sets the default font size to be equivalent to 10px */
+	margin: 10px 15px;
+}
+
+img {
+	border: 0;
+}
+
+h1 {
+	font-family: "Trebuchet MS", Helvetica, sans-serif;
+	font-size: 1.70em;
+	font-weight: normal;
+	color: #333333;
+}
+
+h2, caption {
+	font-family: "Trebuchet MS", Helvetica, sans-serif;
+	font-size: 1.40em;
+	font-weight: normal;
+	color: #115098;
+	text-align: left;
+	margin-top: 25px;
+}
+
+.rtl h2, .rtl caption {
+	text-align: right;
+}
+
+h3, h4 {
+	font-family: "Trebuchet MS", Helvetica, sans-serif;
+	font-size: 1.20em;
+	text-decoration: none;
+	line-height: 1.20em;
+	margin-top: 25px;
+}
+
+p {
+	margin-bottom: 0.7em;
+	line-height: 1.40em;
+	font-size: 0.90em;
+}
+
+ul {
+	list-style: disc;
+	margin: 0 0 1em 2em;
+}
+
+.rtl ul {
+	margin: 0 2em 1em 0;
+}
+
+hr {
+	border: 0 none;
+	border-top: 1px dashed #999999;
+	margin-top: 10px;
+	margin-bottom: 5px;
+	padding-bottom: 5px;
+	height: 1px;
+}
+
+.small {
+	font-size: 0.85em;
+}
+
+/* General links  */
+a:link, a:visited {
+	color: #105289;
+	text-decoration: none;
+}
+
+a:hover {
+	color: #BC2A4D;
+	text-decoration: underline;
+}
+
+a:active {
+	color: #368AD2;
+	text-decoration: none;
+}
+
+.install-body p a {
+	font-weight: bold;
+}
+
+/* Main blocks
+---------------------------------------- */
+#wrap {
+	padding: 0 0 15px 0;
+	min-width: 615px;
+}
+
+#page-header {
+	clear: both;
+	text-align: right;
+	height: 50px;
+	font-size: 0.85em;
+	margin-bottom: 10px;
+}
+
+.rtl #page-header {
+	text-align: left;
+}
+
+#page-header h1 {
+	color: #767676;
+	font-family: "Trebuchet MS",Helvetica,sans-serif;
+	font-size: 1.70em;
+	padding-top: 10px;
+}
+
+#page-header p {
+	font-size: 1.00em;
+}
+
+#page-header p#skip {
+	display: none;
+}
+
+#page-body {
+	clear: both;
+	min-width: 700px;
+}
+
+#page-footer {
+	clear: both;
+	font-size: 0.75em;
+	text-align: center;
+}
+
+#content {
+	padding: 30px 10px 10px;
+	position: relative;
+}
+
+#content h1 {
+	color: #115098;
+	line-height: 1.2em;
+	margin-bottom: 0;
+}
+
+#main {
+	float: left;
+	width: 76%;
+	margin: 0 0 0 3%;
+	min-height: 350px;
+}
+
+.rtl #main {
+	float: right;
+	margin: 0 3% 0 0;
+}
+
+* html #main {
+	height: 350px;
+}
+
+#page-body.simple-page-body {
+	padding: 0;
+	padding-right: 10px;
+	min-width: 0;
+}
+
+/* Tabbed menu
+	Based on: http://www.alistapart.com/articles/slidingdoors2/
+----------------------------------------*/
+#tabs {
+	line-height: normal;
+	margin: 0 0 -6px 7px;
+	min-width: 600px;
+}
+
+.rtl #tabs {
+	margin: 0 7px -6px 0;
+}
+
+#tabs ul {
+	margin:0;
+	padding: 0;
+	list-style: none;
+}
+
+#tabs li {
+	display: inline;
+	margin: 0;
+	padding: 0;
+	font-size: 0.85em;
+	font-weight: bold;
+}
+
+#tabs a {
+	float: left;
+	margin: 0 1px 0 0;
+	padding: 0 0 0 7px;
+	text-decoration: none;
+	position: relative;
+}
+
+.rtl #tabs a {
+	float: right;
+}
+
+#tabs a span {
+	float: left;
+	display: block;
+	padding: 7px 10px 4px 4px;
+	color: #767676;
+	white-space: nowrap;
+	font-family: Arial, Helvetica, sans-serif;
+	text-transform: uppercase;
+	font-weight: bold;
+}
+
+.rtl #tabs a span {
+	float: right;
+}
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+#tabs a span, .rtl #tabs a span { float:none;}
+/* End hack */
+
+#tabs a:hover span {
+	color: #BC2A4D;
+}
+
+#tabs #activetab a {
+	background-position: 0 0;
+	border-bottom: 1px solid #DCDEE2;
+}
+
+#tabs #activetab a span {
+	background-position: 100% 0;
+	padding-bottom: 5px;
+	color: #23649F;
+}
+
+#tabs a:hover {
+	background-position: 0 -69px;
+}
+
+#tabs a:hover span {
+	background-position: 100% -69px;
+}
+
+#tabs #activetab a:hover span {
+	color: #115098;
+}
+
+
+/* Main Panel
+---------------------------------------- */
+#acp {
+	margin: 4px 0;
+	padding: 3px 1px;
+	min-width: 550px;
+	background-color: #FFFFFF;
+	border: 1px #999999 solid;
+}
+
+.panel {
+	padding: 0;
+}
+
+span.corners-top, span.corners-bottom,
+span.corners-top span, span.corners-bottom span {
+	font-size: 1px;
+	line-height: 1px;
+	display: block;
+	height: 5px;
+	background-repeat: no-repeat;
+}
+
+span.corners-top {
+	background-position: 0 0;
+	margin: -4px -2px 0;
+}
+
+span.corners-top span {
+	background-position: 100% 0;
+}
+
+span.corners-bottom {
+	background-position: 0 100%;
+	margin: 0 -2px -4px;
+	clear: both;
+}
+
+span.corners-bottom span {
+	background-position: 100% 100%;
+}
+
+/* Sub-navigation Menu
+---------------------------------------- */
+
+/* Toggle */
+#toggle {
+	padding: 5px;
+	width: 5%;
+	height: 100px;
+	position: absolute;
+	left: 15%;
+	top: 28px;
+	margin-left: 2px;
+}
+
+.rtl #toggle {
+	left: 75%;
+	margin-right: 0;
+	margin-left: 6px;
+}
+
+#toggle-handle {
+	display: block;
+	width: 18px;
+	height: 19px;
+	float: right;
+}
+
+.rtl #toggle-handle {
+	background-position: 100% 50%;
+}
+
+/* Menu */
+#menu {
+	float: left;
+	width: 20%;
+	font-size: 1.00em;
+	padding: 0;
+	border-right: 1px solid #CCCFD3;
+}
+
+.rtl #menu {
+	float: right;
+	border: none;
+	border-left: 1px solid #CCCFD3;
+}
+
+#menu p {
+	font-size: 0.85em;
+}
+
+#menu ul {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+/* Default list state */
+#menu li {
+	padding: 0;
+	margin: 0;
+	font-size: 0.85em;
+	font-weight: bold;
+	display: inline;
+}
+
+/* Link styles for the sub-section links */
+#menu li span {
+	display: block;
+	padding: 3px 3px 3px 8px;
+	margin: 1px 0;
+	text-decoration: none;
+	font-weight: normal;
+	color: #138ECB;
+}
+
+.rtl #menu li span {
+	padding: 3px 8px 3px 3px;
+}
+
+#menu li a:hover, #menu li a:hover span {
+	text-decoration: none;
+	background-color: #FFFFFF;
+	color: #BC2A4D;
+}
+
+#menu li a:active, #menu li a:active span {
+	color: #F632A0;
+}
+
+#menu li#activemenu a:hover span, #menu li#activemenu span {
+	text-decoration: none;
+	font-weight: bold;
+	color: #BC2A4D;
+}
+
+#menu li a:active, #menu li a:active span, #menu li#activemenu a:active span {
+	color: #F632A0;
+}
+
+#menu li span.completed {
+	text-decoration: none;
+	padding: 3px 3px 3px 12px;
+}
+
+.rtl #menu li span.completed {
+	text-decoration: none;
+	padding: 3px 12px 3px 3px;
+}
+
+#menu li.header {
+	font-family: Tahoma, Helvetica, sans-serif;
+	display: block;
+	font-weight: bold;
+	color: #115098;
+	border-bottom: 1px solid #327AA5;
+	padding: 4px 0 2px;
+	margin-top: 15px;
+	text-transform: uppercase;
+	font-size: 0.75em;
+}
+
+/* Table styles
+---------------------------------------- */
+
+table {
+	width: 100%;
+	border: 1px solid #CCCFD3;
+	background-color: #FFFFFF;
+	padding: 1px;
+}
+
+th {
+	padding: 3px 4px;
+	color: #FFFFFF;
+	border-top: 1px solid #6DACD2;
+	border-bottom: 1px solid #327AA5;
+	text-align: left;
+	font-size: 0.75em;
+	text-transform: uppercase;
+}
+
+td {
+	text-align: left;
+	font-size: 0.85em;
+	padding: 4px;
+	line-height: 1.20em;
+}
+
+.rtl th, .rtl td {
+	text-align: right;
+}
+
+table.type2 {
+	border: none;
+	background: none;
+	padding: 0;
+}
+
+table.type2 th {
+	background: none;
+	border-top: none;
+	text-align: center;
+	color: #115098;
+	padding: 2px 0;
+}
+
+table.type2 td {
+	padding: 0;
+	font-size: 1em;
+}
+
+table.type2 td.name {
+	padding: 2px;
+	vertical-align: middle;
+}
+
+table.type3  {
+	float: right;
+	width: 300px;
+	border: none;
+	background-color: transparent;
+	padding: 0;
+}
+
+.rtl table.type3 {
+	float: left;
+}
+
+table.type3 thead th {
+	background-color: transparent;
+	border-top: none;
+	text-align: center;
+	color: #115098;
+	padding: 0 3px;
+	font-size: 0.85em;
+	font-weight: normal;
+	text-transform: none;
+}
+
+table.type3 tbody th {
+	border-top: none;
+	text-align: left;
+	text-transform: none;
+	padding: 0;
+	border: none;
+	font-size: 0.90em;
+	font-weight: normal;
+	width: 100%;
+}
+
+.rtl table.type3 tbody th {
+	text-align: right;
+}
+
+table.type3 td {
+	text-align: center;
+	padding: 1px;
+}
+
+th.name {
+	text-align: left;
+	width: auto;
+}
+
+.rtl th.name {
+	text-align: right;
+}
+
+td.name {
+	text-align: left;
+	font-weight: bold;
+}
+
+.rtl td.name {
+	text-align: right;
+}
+
+.entry {
+	text-align: left;
+	font-weight: normal;
+}
+
+.rtl .entry {
+	text-align: right;
+}
+
+.row1 { background-color: #F9F9F9; }
+.row2 { background-color: #DCEBFE; }
+.row3 { background-color: #DBDFE2; }
+.row4 { background-color: #E4E8EB; }
+.col1 { background-color: #DCEBFE; }
+.col2 { background-color: #F9F9F9; }
+
+.spacer {
+	background-color: #DBDFE2;
+	height: 1px;
+	line-height: 1px;
+}
+
+/* General form styles
+----------------------------------------*/
+fieldset {
+	margin: 15px 0;
+	padding: 10px;
+	border-top: 1px solid #D7D7D7;
+	border-right: 1px solid #CCCCCC;
+	border-bottom: 1px solid #CCCCCC;
+	border-left: 1px solid #D7D7D7;
+	background-color: #FFFFFF;
+	position: relative;
+}
+
+.rtl fieldset {
+	border-top: 1px solid #D7D7D7;
+	border-right: 1px solid #D7D7D7;
+	border-bottom: 1px solid #CCCCCC;
+	border-left: 1px solid #CCCCCC;
+}
+
+* html fieldset {
+	padding: 0 10px 5px 10px;
+}
+
+fieldset p {
+	font-size: 0.85em;
+}
+
+legend {
+	padding: 1px 0;
+	font-family: Tahoma,arial,Verdana,Sans-serif;
+	font-size: .9em;
+	font-weight: bold;
+	color: #115098;
+	margin-top: -.4em;
+	position: relative;
+	text-transform: none;
+	line-height: 1.2em;
+	top: 0;
+	vertical-align: middle;
+}
+
+/* Hide from macIE \*/
+legend { top: -1.2em; }
+/* end */
+
+* html legend {
+	margin: 0 0 -10px -7px;
+	line-height: 1em;
+	font-size: .85em;
+}
+
+/* Holly hack, .rtl comes after html */
+* html .rtl legend {
+	margin: 0;
+	margin-right: -7px;
+}
+
+input, textarea {
+	font-family: Verdana, Helvetica, Arial, sans-serif;
+	font-size: 0.90em;
+	font-weight: normal;
+	cursor: text;
+	vertical-align: middle;
+	padding: 2px;
+	color: #111111;
+	border-left: 1px solid #AFAEAA;
+	border-top: 1px solid #AFAEAA;
+	border-right: 1px solid #D5D5C8;
+	border-bottom: 1px solid #D5D5C8;
+	background-color: #E3DFD8;
+}
+
+.rtl input, .rtl textarea {
+	border-left: 1px solid #D5D5C8;
+	border-top: 1px solid #AFAEAA;
+	border-right: 1px solid #AFAEAA;
+	border-bottom: 1px solid #D5D5C8;
+}
+
+input:hover, textarea:hover {
+	border-left: 1px solid #AFAEAA;
+	border-top: 1px solid #AFAEAA;
+	border-right: 1px solid #AFAEAA;
+	border-bottom: 1px solid #AFAEAA;
+	background-color: #E9E9E2;
+}
+
+input.langvalue, textarea.langvalue {
+	width: 90%;
+}
+
+optgroup, select {
+	font-family: Verdana, Helvetica, Arial, sans-serif;
+	font-size: 0.85em;
+	font-weight: normal;
+	font-style: normal;
+	cursor: pointer;
+	vertical-align: middle;
+	width: auto;
+	color: #000;
+}
+
+optgroup {
+	font-size: 1.00em;
+	font-weight: bold;
+}
+
+optgroup.disabled-options {
+	display: none;
+	background-color: gray;
+}
+
+option {
+	padding: 0 1em 0 0;
+	color: #000;
+}
+
+option.disabled-option {
+	color: graytext;
+}
+
+.rtl option {
+	padding: 0 0 0 1em;
+}
+
+.sep {
+	font-weight: bold;
+}
+
+.username-coloured {
+	font-weight: bold;
+}
+
+textarea {
+	font-family: Verdana, Helvetica, Arial, sans-serif;
+	font-size: 0.85em;
+	width: 60%;
+	padding: 2px;
+}
+
+label {
+	cursor: pointer;
+	font-size: 0.85em;
+	padding: 0 5px 0 0;
+}
+
+.rtl label {
+	padding: 0 0 0 5px;
+}
+
+label input {
+	font-size: 1.00em;
+	vertical-align: middle;
+}
+
+label img {
+	vertical-align: middle;
+}
+
+fieldset.quick, p.quick {
+	margin: 0 0 5px;
+	padding: 5px 0 0;
+	border: none;
+	background-color: transparent;
+	text-align: right;
+}
+
+.rtl fieldset.quick, .rtl p.quick {
+	text-align: left;
+}
+
+fieldset.quick legend {
+	display: none;
+}
+
+fieldset.tabulated {
+	background: none;
+	margin: 0;
+	padding: 0;
+	padding-top: 5px;
+	border: 0;
+}
+
+fieldset.tabulated legend {
+	display: none;
+}
+
+fieldset.nobg {
+	margin: 15px 0 0 0;
+	padding: 0;
+	border: none;
+	background-color: transparent;
+}
+
+fieldset.display-options {
+	margin: 15px 0 2px 0;
+	padding: 0 0 4px 0;
+	border: none;
+	background-color: transparent;
+	text-align: center;
+	font-size: 0.75em;
+}
+
+fieldset.display-options select, fieldset.display-options input, fieldset.display-options label {
+	font-size: 1.00em;
+	vertical-align: middle;
+}
+
+select option.disabled {
+	background-color: #bbb;
+	color: #fff;
+}
+
+/* Special case inputs */
+select#board_timezone,
+select#full_folder_action {
+	width: 95%;
+}
+
+/* Definition list layout for forms
+	Other general def. list properties defined in prosilver_main.css
+---------------------------------------- */
+dl {
+	font-family: Verdana, Helvetica, Arial, sans-serif;
+	font-size: 1.00em;
+}
+
+dt {
+	float: left;
+	width: auto;
+}
+
+.rtl dt {
+	float: right;
+}
+
+dd { color: #666666;}
+dd + dd { padding-top: 5px;}
+dt span { padding: 0 5px 0 0;}
+.rtl dt span { padding: 0 0 0 5px;}
+
+dt .explain { font-style: italic;}
+
+dt label {
+	font-size: 1.00em;
+	text-align: left;
+	font-weight: bold;
+	color: #4A5A73;
+}
+
+.rtl dt label {
+	text-align: right;
+}
+
+dd label {
+	font-size: 1.00em;
+	white-space: nowrap;
+	margin: 0 10px 0 0;
+	color: #4A5A73;
+}
+
+.rtl dd label {
+	margin: 0 0 0 10px;
+}
+
+html>body dd label input { vertical-align: text-bottom;}	/* Tweak for Moz to align checkboxes/radio buttons nicely */
+
+dd input {
+	font-size: 1.00em;
+	max-width: 100%;
+}
+
+dd select {
+	font-size: 100%;
+	width: auto;
+	max-width: 100%;
+}
+
+dd textarea {
+	font-size: 0.90em;
+	width: 90%;
+}
+
+dd select {
+	width: auto;
+	font-size: 1.00em;
+}
+
+fieldset dl {
+	margin-bottom: 10px;
+	font-size: 0.85em;
+}
+
+fieldset dt {
+	width: 45%;
+	text-align: left;
+	border: none;
+	border-right: 1px solid #CCCCCC;
+	padding-top: 3px;
+}
+
+.rtl fieldset dt {
+	text-align: right;
+	border: none;
+	border-left: 1px solid #CCCCCC;
+}
+
+fieldset dd {
+	margin: 0 0 0 45%;
+	padding: 0 0 0 5px;
+	border: none;
+	border-left: 1px solid #CCCCCC;
+	vertical-align: top;
+	font-size: 1.00em;
+}
+
+.rtl fieldset dd {
+	margin: 0 45% 0 0;
+	padding: 0 5px 0 0;
+	border: none;
+	border-right: 1px solid #CCCCCC;
+}
+
+dd.full, .rtl dd.full {
+	margin: 0;
+	border: 0;
+	padding: 0;
+	padding-top: 3px;
+	text-align: center;
+	width: 95%;
+}
+
+/* Hover highlights for form rows */
+fieldset dl:hover dt, fieldset dl:hover dd {
+	border-color: #666666;
+}
+
+fieldset dl:hover dt label {
+	color: #000000;
+}
+
+fieldset dl dd label:hover {
+	color: #BC2A4D;
+}
+
+input:focus, textarea:focus {
+	border: 1px solid #BC2A4D;
+	background-color: #E9E9E2;
+	color: #BC2A4D;
+}
+
+/* Submit button fieldset or paragraph
+---------------------------------------- */
+fieldset.submit-buttons {
+	text-align: center;
+	border: none;
+	background-color: transparent;
+	margin: 0;
+	padding: 4px;
+	margin-top: -1px;
+}
+
+p.submit-buttons {
+	text-align: center;
+	margin: 0;
+	padding: 4px;
+	margin-top: 10px;
+}
+
+fieldset.submit-buttons input, p.submit-buttons input {
+	padding: 3px 2px;
+}
+
+fieldset.submit-buttons legend {
+	display: none;
+}
+
+/* Input field styles
+---------------------------------------- */
+
+input.radio, input.permissions-checkbox {
+	width: auto !important;
+	background-color: transparent;
+	border: none;
+	cursor: default;
+}
+
+input.full,
+textarea.full {
+	width: 99%;
+}
+
+* html input.full, * html textarea.full { width: 95%;}
+input.medium { width: 50%;}
+input.narrow { width: 25%;}
+input.tiny { width: 10%;}
+input.autowidth { width: auto !important;}
+.box2 .inputbox { background-color: #E9E9E9;}
+
+/* Form button styles
+---------------------------------------- */
+a.button1, input.button1, input.button3,
+a.button2, input.button2 {
+	width: auto !important;
+	padding: 1px 3px 0 3px;
+	font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif;
+	color: #000;
+	font-size: 0.85em;
+	cursor: pointer;
+}
+
+a.button1, input.button1 {
+	font-weight: bold;
+	border: 1px solid #666666;
+}
+
+/* Alternative button */
+a.button2, input.button2 {
+	border: 1px solid #666666;
+}
+
+/* <a> button in the style of the form buttons */
+a.button1, a.button1:link, a.button1:visited, a.button1:active,
+a.button2, a.button2:link, a.button2:visited, a.button2:active {
+	text-decoration: none;
+	color: #000000;
+	padding: 4px 8px;
+}
+
+/* Hover states */
+a.button1:hover, input.button1:hover,
+a.button2:hover, input.button2:hover {
+	border: 1px solid #BC2A4D;
+	color: #BC2A4D;
+}
+
+input.disabled {
+	font-weight: normal;
+	color: #666666;
+}
+
+/* Pagination
+---------------------------------------- */
+.pagination {
+	height: 1%; /* IE tweak (holly hack) */
+	width: auto;
+	text-align: right;
+	margin-top: 5px;
+	font-size: 0.85em;
+	padding-bottom: 2px;
+}
+
+.rtl .pagination {
+	text-align: left;
+}
+
+.pagination strong,
+.pagination b {
+	font-weight: normal;
+}
+
+.pagination span.page-sep {
+	display:none;
+}
+
+.pagination span strong {
+	padding: 0 2px;
+	margin: 0 2px;
+	font-weight: normal;
+	font-size: 0.85em;
+	color: #FFFFFF;
+	background: #4692BF;
+	border: 1px solid #4692BF;
+}
+
+.pagination span a, .pagination span a:link, .pagination span a:visited, .pagination span a:active {
+	font-weight: normal;
+	font-size: 0.85em;
+	text-decoration: none;
+	color: #5C758C;
+	margin: 0 2px;
+	padding: 0 2px;
+	background: #ECEDEE;
+	border: 1px solid #B4BAC0;
+}
+
+.pagination span a:hover {
+	border-color: #368AD2;
+	background: #368AD2;
+	color: #FFFFFF;
+	text-decoration: none;
+}
+
+.pagination img {
+	vertical-align: middle;
+}
+
+
+/* Action Highlighting
+---------------------------------------- */
+.successbox, .errorbox {
+	padding: 8px;
+	margin: 10px 0;
+	color: #FFFFFF;
+	text-align: center;
+}
+
+.success {
+	color: #228822;
+}
+
+.error {
+	color: #BC2A4D;
+}
+
+.successbox {
+	background-color: #228822;
+}
+
+.errorbox {
+	background-color: #BC2A4D;
+}
+
+* html .errorbox, * html .successbox { height: 1%; } /* Pixel shift fix for IE */
+
+.successbox h3, .errorbox h3 {
+	color: #FFFFFF;
+	margin: 0 0 0.5em;
+	font-size: 1.10em;
+	font-family: "Lucida Grande",Verdana,Helvetica,Arial,sans-serif;
+}
+
+.successbox p, .errorbox p {
+	color: #FFFFFF;
+	font-size: 0.85em;
+	margin-bottom: 0;
+}
+
+.errorbox a:link, .errorbox a:active, .errorbox a:visited,
+.successbox a:link, .successbox a:active, .successbox a:visited {
+	color: #DBD7D1;
+	text-decoration: underline;
+	font-weight: bold;
+}
+
+.errorbox a:hover, .successbox a:hover {
+	color: #FFFFFF;
+	text-decoration: none;
+	font-weight: bold;
+}
+
+/* Special cases for the error page */
+#errorpage #page-header a {
+	font-weight: bold;
+	line-height: 6em;
+}
+
+#errorpage #content {
+	padding-top: 10px;
+}
+
+#errorpage #content h1 {
+	color: #DF075C;
+}
+
+#errorpage #content h2 {
+	margin-top: 20px;
+	margin-bottom: 5px;
+	border-bottom: 1px solid #CCCCCC;
+	padding-bottom: 5px;
+	color: #333333;
+}
+
+/* Tooltip for permission roles */
+.tooltip {
+	width: 200px;
+	color: #000;
+	text-align: center;
+	border: 1px solid #AAA;
+}
+
+.tooltip span.top {
+	background: #EFEFEF;
+	font-weight: bold;
+	padding: 2px;
+}
+
+.tooltip span.bottom {
+	padding: 5px;
+	color: #000000;
+	background: #FFFFFF;
+}
+
+/*
+ Format Buttons for signature editor
+*/
+#format-buttons {
+	margin: 15px 0 2px 0;
+}
+
+#format-buttons input, #format-buttons select {
+	vertical-align: middle;
+}
+
+/* Nice method for clearing floated blocks without having to insert any extra markup
+	From http://www.positioniseverything.net/easyclearing.html
+.clearfix:after, #tabs:after, .row:after, #content:after, fieldset dl:after, #page-body:after {
+	content: ".";
+	display: block;
+	height: 0;
+	clear: both;
+	visibility: hidden;
+}*/
+
+.clearfix, #tabs, .row, #content, fieldset dl, #page-body {
+	height: 1%;
+	overflow: hidden;
+}
+
+/* Syntax Highlighting
+---------------------------------------- */
+.sourcenum {
+	color: gray;
+	font-family: Monaco, 'Courier New', monospace;
+	font-size: 1.25em;
+	font-weight: bold;
+	line-height: 1.20em;
+	text-align: right;
+	padding: 0;
+}
+
+.rtl .sourcenum {
+	text-align: left;
+}
+
+.source {
+	font-family: Monaco, 'Courier New', monospace;
+	font-size: 1.25em;
+	line-height: 1.20em;
+	padding: 0;
+}
+
+.syntaxbg {
+	color: #FFFFFF;
+}
+
+.syntaxcomment {
+	color: #FF8000;
+}
+
+.syntaxdefault {
+	color: #0000BB;
+}
+
+.syntaxhtml {
+	color: #000000;
+}
+
+.syntaxkeyword {
+	color: #007700;
+}
+
+.syntaxstring {
+	color: #DD0000;
+}
+
+/* Permission interface
+---------------------------------------- */
+
+fieldset.permissions legend {
+	text-transform: none;
+}
+
+fieldset.permissions legend input{
+	height: 1.1em;
+}
+
+/* Permission sections */
+fieldset.permissions .permissions-simple {
+	text-align: left;
+	padding-top: 3px;
+}
+
+.rtl fieldset.permissions .permissions-simple {
+	text-align: right;
+}
+
+fieldset.permissions .permissions-advanced {
+	padding: 10px 0 0 5px;
+	vertical-align: top;
+	clear: right;
+}
+
+.rtl fieldset.permissions .permissions-advanced {
+	padding: 10px 5px 0 0;
+	clear: left;
+}
+
+fieldset.permissions .permissions-switch {
+	float: right;
+}
+
+.rtl fieldset.permissions .permissions-switch {
+	float: left;
+}
+
+fieldset.permissions .padding {
+}
+
+.permissions-switch a {
+	text-decoration: underline;
+	font-size: 0.90em;
+}
+
+.permissions-reset {
+	margin-top: -6px;
+	padding-bottom: 10px;
+}
+
+.permissions-reset a {
+	font-size: .8em;
+}
+
+/* Tabbed menu */
+.permissions-category {
+	line-height: normal;
+	margin: 0 0 -1px 7px;
+	min-width: 570px;
+	font-size: 0.85em;
+}
+
+.rtl .permissions-category {
+	margin: 0 7px -1px 0;
+}
+
+.permissions-category ul {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+}
+
+.permissions-category li {
+	display: inline;
+	margin: 0;
+	padding: 0;
+	font-size: 1em;
+	font-weight: bold;
+}
+
+.permissions-category a {
+	float: left;
+	margin: 0 1px 0 0;
+	padding: 0 0 0 6px;
+	text-decoration: none;
+	position: relative;
+}
+
+.rtl .permissions-category a {
+	float: right;
+}
+
+.permissions-category a span.tabbg {
+	float: left;
+	display: block;
+	padding: 7px 12px 6px 6px;
+	color: #536482;
+	white-space: nowrap;
+}
+
+.rtl .permissions-category a span.tabbg {
+	float: right;
+}
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+.permissions-category a span.tabbg, .rtl .permissions-category a span.tabbg { float: none;}
+/* End hack */
+
+.permissions-category a:hover span.tabbg {
+	color: #DD6900;
+}
+
+.permissions-category .activetab a {
+	background-position: 0 0;
+}
+
+.permissions-category .activetab a span.tabbg {
+	background-position: 100% 0;
+	padding-bottom: 7px;
+	color: #333333;
+}
+
+.permissions-category a:hover {
+	background-position: 0 -70px;
+}
+
+.permissions-category a:hover span.tabbg {
+	background-position: 100% -70px;
+}
+
+.permissions-category .activetab a:hover span.tabbg {
+	color: #333333;
+	background-position: 100% 0;
+}
+
+.permissions-category .activetab a:hover {
+	background-position: 0 0;
+}
+
+.permissions-category a span.colour {
+	border: 1px solid #536482;
+	display: block;
+	float: left;
+	width: 10px;
+	height: 10px;
+	margin: 0 5px 0 0;
+}
+
+/* Most browsers will have to live with a left aligned icon in RTL mode, as (currently) only Firefox 3.0 Alpha 3 renders it correctly without destroying it
+.rtl .permissions-category a span.colour {
+	float: right;
+	margin: 0 0 0 5px;
+}
+*/
+
+.permissions-category .activetab span.colour {
+	border-color: #333333;
+}
+
+.permissions-category a:hover span.colour {
+	border-color: #DD6900;
+}
+
+.permissions-category .activetab a:hover span.colour {
+	border-color: #333333;
+}
+
+/* Permission preset colours */
+.permissions-preset-yes span.colour,
+.yes {
+	background-color: #86F786;
+}
+
+.permissions-preset-custom span.colour {
+	background-color: #B2BBDD;
+}
+
+.permissions-preset-never span.colour {
+	background-color: #DD0000;
+}
+
+.permissions-preset-no span.colour,
+.never {
+	background-color: #EFB0B2;
+}
+
+/* Permission panel
+---------------------------------------- */
+.permissions-panel {
+	float: left;
+	background-color: #CADCEB;
+	width: 100%;
+}
+
+.rtl .permissions-panel {
+	float: right;
+}
+
+.permissions-panel span.corners-top, .permissions-panel span.corners-bottom,
+.permissions-panel span.corners-top span, .permissions-panel span.corners-bottom span {
+	font-size: 1px;
+	line-height: 1px;
+	display: block;
+	height: 5px;
+	background-repeat: no-repeat;
+}
+
+.permissions-panel span.corners-top {
+	background-position: 0 0;
+	margin: 0 0;
+}
+
+.permissions-panel span.corners-top span {
+	background-position: 100% 0;
+}
+
+.permissions-panel span.corners-bottom {
+	background-position: 0 100%;
+	margin: 0 0;
+	clear: both;
+}
+
+.permissions-panel span.corners-bottom span {
+	background-position: 100% 100%;
+}
+
+/* Permission table
+---------------------------------------- */
+.permissions-panel .tablewrap {
+	margin: 0 10px;
+}
+
+.permissions-panel table {
+	width: 100%;
+}
+
+.permissions-panel th {
+	text-transform: none;
+}
+
+.permissions-panel th.value {
+	text-align: center;
+}
+
+.permissions-panel th.name {
+	text-align: left;
+	width: auto;
+	text-transform: none;
+}
+
+.rtl .permissions-panel th.name {
+	text-align: right;
+}
+
+.permissions-panel th.permissions-name {
+	border: none;
+	color: #536482;
+	font-weight: normal;
+}
+
+.permissions-panel th.permissions-name a.trace {
+	display: inline;
+}
+
+.permissions-panel th.row3 {
+	background-image: none;
+	background-color: #D1D7DC;
+	color: #536482;
+	border: none;
+}
+
+.permissions-panel th.row4 {
+	background-image: none;
+	background-color: #E4E8EB;
+	color: #536482;
+	border: none;
+}
+
+.permissions-panel th a:link, .permissions-panel th a:hover, .permissions-panel th a:visited {
+	display: block;
+	color: #FFFFFF;
+	text-decoration: underline;
+}
+
+.permissions-panel td.permissions-yes label:hover {
+	background-color: #86F786;
+}
+
+.permissions-panel td.permissions-no label:hover {
+	background-color: #EFB0B2;
+}
+
+.permissions-panel td.permissions-never label:hover {
+	background-color: #DD0000;
+}
+
+.permissions-panel td {
+	padding: 0;
+	text-align: center;
+	width: 10%;
+}
+
+.permissions-panel td label {
+	display: block;
+	margin: 0;
+	padding: 0;
+}
+
+/* Classes for additional tasks
+---------------------------------------- */
+
+.phpinfo {
+	overflow: auto;
+	width: 99%;
+	direction: ltr;
+}
+
+.phpinfo td, .phpinfo th, .phpinfo h2, .phpinfo h1 {
+	text-align: left;
+}
+
+.rules span.corners-top {
+	margin: 0 -10px 5px -10px;
+}
+
+.rules span.corners-bottom {
+	margin: 5px -10px 0 -10px;
+}
+
+div.rules {
+	background-color: #ececec;
+	color: #bcbcbc;
+	padding: 0 10px;
+	margin: 10px 0;
+	font-size: 1.1em;
+}
+
+div.rules ul {
+	margin-left: 20px;
+}
+
+p.rules {
+	background-color: #ececec;
+	background-image: none;
+	padding: 5px;
+}
+
+p.rules img {
+	vertical-align: middle;
+}
+
+p.rules a {
+	vertical-align: middle;
+	clear: both;
+}
+
+div.rules {
+	background-color: #ECD5D8;
+	color: #BC2A4D;
+}
+
+p.rules {
+	background-color: #ECD5D8;
+	background-image: none;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/umil.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,3027 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil.php 233 2010-08-10 02:22:09Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+define('UMIL_VERSION', '1.0.3');
+
+/**
+* Multicall instructions
+*
+* With the "multicall" (as I am calling it) you can make a single function call and have it repeat the actions multiple times on information sent from an array.
+*
+* To do this (it does not work on the _exists functions), all you must do is send the first variable in the function call as an array and for each item, send an array for each of the variables in order.
+*
+* Example:
+* $umil->config_add(array(
+*	array('config_name', 'config_value'),
+*	array('config_name1', 'config_value1'),
+*	array('config_name2', 'config_value2', true),
+*	array('config_name3', 'config_value3', true),
+* );
+*/
+
+/**
+* UMIL - Unified MOD Installation Library class
+*
+* Cache Functions
+*	cache_purge($type = '', $style_id = 0)
+*
+* Config Functions:
+*	config_exists($config_name, $return_result = false)
+*	config_add($config_name, $config_value = '', $is_dynamic = false)
+*	config_update($config_name, $config_value, $is_dynamic = false)
+*	config_remove($config_name)
+*
+* Module Functions
+*	module_exists($class, $parent, $module)
+*	module_add($class, $parent = 0, $data = array())
+*	module_remove($class, $parent = 0, $module = '')
+*
+* Permissions/Auth Functions
+*	permission_exists($auth_option, $global = true)
+*	permission_add($auth_option, $global = true)
+*	permission_remove($auth_option, $global = true)
+*	permission_set($name, $auth_option = array(), $type = 'role', $global = true, $has_permission = true)
+*	permission_unset($name, $auth_option = array(), $type = 'role', $global = true)
+*
+* Table Functions
+*	table_exists($table_name)
+*	table_add($table_name, $table_data = array())
+*	table_remove($table_name)
+*
+* Table Column Functions
+*	table_column_exists($table_name, $column_name)
+*	table_column_add($table_name, $column_name = '', $column_data = array())
+*	table_column_update($table_name, $column_name = '', $column_data = array())
+*	table_column_remove($table_name, $column_name = '')
+*
+* Table Key/Index Functions
+*	table_index_exists($table_name, $index_name)
+*	table_index_add($table_name, $index_name = '', $column = array())
+*	table_index_remove($table_name, $index_name = '')
+*
+* Table Row Functions (note that these actions are not reversed automatically during uninstallation)
+*	table_row_insert($table_name, $data = array())
+*	table_row_remove($table_name, $data = array())
+*	table_row_update($table_name, $data = array(), $new_data = array())
+*
+* Version Check Function
+* 	version_check($url, $path, $file)
+*/
+class umil
+{
+	/**
+	* This will hold the text output for the inputted command (if the mod author would like to display the command that was ran)
+	*
+	* @var string
+	*/
+	var $command = '';
+
+	/**
+	* This will hold the text output for the result of the command.  $user->lang['SUCCESS'] if everything worked.
+	*
+	* @var string
+	*/
+	var $result = '';
+
+	/**
+	* Auto run $this->display_results after running a command
+	*/
+	var $auto_display_results = false;
+
+	/**
+	* Stand Alone option (this makes it possible to just use the single umil file and not worry about any language stuff
+	*/
+	var $stand_alone = false;
+
+    /**
+	* Were any new permissions added (used in umil_frontend)?
+	*/
+	var $permissions_added = false;
+
+	/**
+	* Database Object
+	*/
+	var $db = false;
+
+	/**
+	* Database Tools Object
+	*/
+	var $db_tools = false;
+
+	/**
+	* Do we want a custom prefix besides the phpBB table prefix?  You *probably* should not change this...
+	*/
+	var $table_prefix = false;
+
+	/**
+	* Constructor
+	*/
+	function umil($stand_alone = false, $db = false)
+	{
+		// Setup $this->db
+		if ($db !== false)
+		{
+			if (!is_object($db) || !method_exists($db, 'sql_query'))
+			{
+				trigger_error('Invalid $db Object');
+			}
+
+			$this->db = $db;
+		}
+		else
+		{
+			global $db;
+			$this->db = $db;
+		}
+
+		// Setup $this->db_tools
+		if (!class_exists('phpbb_db_tools'))
+		{
+			global $phpbb_root_path, $phpEx;
+			include($phpbb_root_path . 'includes/db/db_tools.' . $phpEx);
+		}
+		$this->db_tools = new phpbb_db_tools($this->db);
+
+		$this->stand_alone = $stand_alone;
+
+		if (!$stand_alone)
+		{
+			global $config, $user, $phpbb_root_path, $phpEx;
+
+			/* Does not have the fall back option to use en/ if the user's language file does not exist, so we will not use it...unless that is changed.
+			if (method_exists('user', 'set_custom_lang_path'))
+			{
+				$user->set_custom_lang_path($phpbb_root_path . 'umil/language/');
+				$user->add_lang('umil');
+				$user->set_custom_lang_path($phpbb_root_path . 'language/');
+			}
+			else
+			{*/
+				// Include the umil language file.  First we check if the language file for the user's language is available, if not we check if the board's default language is available, if not we use the english file.
+				if (isset($user->data['user_lang']) && file_exists("{$phpbb_root_path}umil/language/{$user->data['user_lang']}/umil.$phpEx"))
+				{
+					$path = $user->data['user_lang'];
+				}
+				else if (file_exists("{$phpbb_root_path}umil/language/" . basename($config['default_lang']) . "/umil.$phpEx"))
+				{
+					$path = basename($config['default_lang']);
+				}
+				else if (file_exists("{$phpbb_root_path}umil/language/en/umil.$phpEx"))
+				{
+					$path = 'en';
+				}
+				else
+				{
+					trigger_error('Language Files Missing.<br /><br />Please download the latest UMIL (Unified MOD Install Library) from: <a href="http://www.phpbb.com/mods/umil/">phpBB.com/mods/umil</a>', E_USER_ERROR);
+				}
+
+				$user->add_lang('./../../umil/language/' . $path . '/umil');
+			//}
+
+			$user->add_lang(array('acp/common', 'acp/permissions'));
+
+			// Check to see if a newer version is available.
+			$info = $this->version_check('www.phpbb.com', '/updatecheck', ((defined('PHPBB_QA')) ? 'umil_qa.txt' : 'umil.txt'));
+			if (is_array($info) && isset($info[0]) && isset($info[1]))
+			{
+				if (version_compare(UMIL_VERSION, $info[0], '<'))
+				{
+					global $template;
+
+					// Make sure user->setup() has been called
+					if (empty($user->lang))
+					{
+						$user->setup();
+					}
+
+					page_header('', false);
+
+					$user->lang['UPDATE_UMIL'] = (isset($user->lang['UPDATE_UMIL'])) ? $user->lang['UPDATE_UMIL'] : 'This version of UMIL is outdated.<br /><br />Please download the latest UMIL (Unified MOD Install Library) from: <a href="%1$s">%1$s</a>';
+					$template->assign_vars(array(
+						'S_BOARD_DISABLED'		=> true,
+						'L_BOARD_DISABLED'		=> sprintf($user->lang['UPDATE_UMIL'], $info[1]),
+					));
+				}
+			}
+		}
+	}
+
+	/**
+	* umil_start
+	*
+	* A function which runs (almost) every time a function here is ran
+	*/
+	function umil_start()
+	{
+		global $user;
+
+		// Set up the command.  This will get the arguments sent to the function.
+		$args = func_get_args();
+		$this->command = call_user_func_array(array($this, 'get_output_text'), $args);
+
+		$this->result = (isset($user->lang['SUCCESS'])) ? $user->lang['SUCCESS'] : 'SUCCESS';
+		$this->db->sql_return_on_error(true);
+
+		//$this->db->sql_transaction('begin');
+	}
+
+	/**
+	* umil_end
+	*
+	* A function which runs (almost) every time a function here is ran
+	*/
+	function umil_end()
+	{
+		global $user;
+
+		// Set up the result.  This will get the arguments sent to the function.
+		$args = func_get_args();
+		$result = call_user_func_array(array($this, 'get_output_text'), $args);
+		$this->result = ($result) ? $result : $this->result;
+
+		if ($this->db->sql_error_triggered)
+		{
+			if ($this->result == ((isset($user->lang['SUCCESS'])) ? $user->lang['SUCCESS'] : 'SUCCESS'))
+			{
+				$this->result = 'SQL ERROR ' . $this->db->sql_error_returned['message'];
+			}
+			else
+			{
+				$this->result .= '<br /><br />SQL ERROR ' . $this->db->sql_error_returned['message'];
+			}
+
+			//$this->db->sql_transaction('rollback');
+		}
+		else
+		{
+			//$this->db->sql_transaction('commit');
+		}
+
+		$this->db->sql_return_on_error(false);
+
+		// Auto output if requested.
+		if ($this->auto_display_results && method_exists($this, 'display_results'))
+		{
+			$this->display_results();
+		}
+
+		return '<strong>' . $this->command . '</strong><br />' . $this->result;
+	}
+
+	/**
+	* Get text for output
+	*
+	* Takes the given arguments and prepares them for the UI
+	*
+	* First argument sent is used as the language key
+	* Further arguments (if send) are used on the language key through vsprintf()
+	*
+	* @return string Returns the prepared string for output
+	*/
+	function get_output_text()
+	{
+		global $user;
+
+		// Set up the command.  This will get the arguments sent to the function.
+		$args = func_get_args();
+		if (sizeof($args))
+		{
+			$lang_key = array_shift($args);
+
+			if (sizeof($args))
+			{
+				$lang_args = array();
+				foreach ($args as $arg)
+				{
+					$lang_args[] = (isset($user->lang[$arg])) ? $user->lang[$arg] : $arg;
+				}
+
+				return @vsprintf(((isset($user->lang[$lang_key])) ? $user->lang[$lang_key] : $lang_key), $lang_args);
+			}
+			else
+			{
+				return ((isset($user->lang[$lang_key])) ? $user->lang[$lang_key] : $lang_key);
+			}
+		}
+
+		return '';
+	}
+
+	/**
+	* Run Actions
+	*
+	* Do-It-All function that can do everything required for installing/updating/uninstalling a mod based on an array of actions and the versions.
+	*
+	* @param string $action The action. install|update|uninstall
+	* @param array $versions The array of versions and the actions for each
+	* @param string $version_config_name The name of the config setting which holds/will hold the currently installed version
+	* @param string $version_select Added for the UMIL Auto system to allow you to select the version you want to install/update/uninstall to.
+	*/
+	function run_actions($action, $versions, $version_config_name, $version_select = '')
+	{
+		// We will sort the actions to prevent issues from mod authors incorrectly listing the version numbers
+		uksort($versions, 'version_compare');
+
+		// Find the current version to install
+		$current_version = '0.0.0';
+		foreach ($versions as $version => $actions)
+		{
+			$current_version = $version;
+		}
+
+		$db_version = '';
+		if ($this->config_exists($version_config_name))
+		{
+			global $config;
+			$db_version = $config[$version_config_name];
+		}
+
+		// Set the action to install from update if nothing is currently installed
+		if ($action == 'update' && !$db_version)
+		{
+			$action = 'install';
+		}
+
+		if ($action == 'install' || $action == 'update')
+		{
+			$version_installed = $db_version;
+			foreach ($versions as $version => $version_actions)
+			{
+				// If we are updating
+				if ($db_version && version_compare($version, $db_version, '<='))
+				{
+					continue;
+				}
+
+				if ($version_select && version_compare($version, $version_select, '>'))
+				{
+					break;
+				}
+
+				foreach ($version_actions as $method => $params)
+				{
+					if ($method == 'custom')
+					{
+						$this->_call_custom_function($params, $action, $version);
+					}
+					else
+					{
+						if (method_exists($this, $method))
+						{
+							call_user_func(array($this, $method), $params);
+						}
+					}
+				}
+
+				$version_installed = $version;
+			}
+
+			// update the version number or add it
+			if ($this->config_exists($version_config_name))
+			{
+				$this->config_update($version_config_name, $version_installed);
+			}
+			else
+			{
+				$this->config_add($version_config_name, $version_installed);
+			}
+		}
+		else if ($action == 'uninstall' && $db_version)
+		{
+			// reverse version list
+			$versions = array_reverse($versions);
+
+			foreach ($versions as $version => $version_actions)
+			{
+				// Uninstalling and this listed version is newer than installed
+				if (version_compare($version, $db_version, '>'))
+				{
+					continue;
+				}
+
+				// Version selection stuff
+				if ($version_select && version_compare($version, $version_select, '<='))
+				{
+					// update the version number
+					$this->config_update($version_config_name, $version);
+					break;
+				}
+
+				$cache_purge = false;
+				$version_actions = array_reverse($version_actions);
+				foreach ($version_actions as $method => $params)
+				{
+					if ($method == 'custom')
+					{
+						$this->_call_custom_function($params, $action, $version);
+					}
+					else
+					{
+						// This way we always run the cache purge at the end of the version (done for the uninstall because the instructions are reversed, which would cause the cache purge to be run at the beginning if it was meant to run at the end).
+						if ($method == 'cache_purge')
+						{
+							$cache_purge = $params;
+							continue;
+						}
+
+						// A few things are not possible for uninstallations update actions and table_row actions
+						if (strpos($method, 'update') !== false || strpos($method, 'table_insert') !== false || strpos($method, 'table_row_') !== false)
+						{
+							continue;
+						}
+
+						// reverse function call
+						$method = str_replace(array('add', 'remove', 'temp'), array('temp', 'add', 'remove'), $method);
+						$method = str_replace(array('set', 'unset', 'temp'), array('temp', 'set', 'unset'), $method);
+
+						if (method_exists($this, $method))
+						{
+							call_user_func(array($this, $method), ((is_array($params) ? array_reverse($params) : $params)));
+						}
+					}
+				}
+
+				if ($cache_purge !== false)
+				{
+					$this->cache_purge($cache_purge);
+				}
+			}
+
+			if (!$version_select)
+			{
+				// Unset the version number
+				$this->config_remove($version_config_name);
+			}
+		}
+	}
+
+	/**
+	* Call custom function helper
+	*/
+	function _call_custom_function($functions, $action, $version)
+	{
+		if (!is_array($functions))
+		{
+			$functions = array($functions);
+		}
+
+		$return = '';
+
+		foreach ($functions as $function)
+		{
+			if (function_exists($function))
+			{
+				// Must reset before calling the function
+				$this->umil_start();
+
+				$returned = call_user_func($function, $action, $version);
+				if (is_string($returned))
+				{
+					$this->command = $this->get_output_text($returned);
+				}
+				else if (is_array($returned) && isset($returned['command']))
+				{
+					if (is_array($returned['command']))
+					{
+						$this->command = call_user_func_array(array($this, 'get_output_text'), $returned['command']);
+					}
+					else
+					{
+						$this->command = $this->get_output_text($returned['command']);
+					}
+
+					if (isset($returned['result']))
+					{
+						$this->result = $this->get_output_text($returned['result']);
+					}
+				}
+				else
+				{
+					$this->command = $this->get_output_text('UNKNOWN');
+				}
+
+				$return .= $this->umil_end() . '<br />';
+			}
+		}
+
+		return $return;
+	}
+
+	/**
+	* Multicall Helper
+	*
+	* @param mixed $function Function name to call
+	* @param mixed $params The parameters array
+	*
+	* @return bool True if we have done a multicall ($params is an array), false if not ($params is not an array)
+	*/
+	function multicall($function, $params)
+	{
+		if (is_array($params) && !empty($params))
+		{
+			foreach ($params as $param)
+			{
+				if (!is_array($param))
+				{
+					call_user_func(array($this, $function), $param);
+				}
+				else
+				{
+					call_user_func_array(array($this, $function), $param);
+				}
+			}
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	* Cache Purge
+	*
+	* This function is for purging either phpBB3’s data cache, authorization cache, or the styles cache.
+	*
+	* @param string $type The type of cache you want purged.  Available types: auth, imageset, template, theme.  Anything else sent will purge the forum's cache.
+	* @param int $style_id The id of the item you want purged (if the type selected is imageset/template/theme, 0 for all items in that section)
+	*/
+	function cache_purge($type = '', $style_id = 0)
+	{
+		global $auth, $cache, $user, $phpbb_root_path, $phpEx;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $type))
+		{
+			return;
+		}
+
+		$style_id = (int) $style_id;
+		$type = (string) $type; // Prevent PHP bug.
+
+		switch ($type)
+		{
+			case 'auth' :
+				$this->umil_start('AUTH_CACHE_PURGE');
+				$cache->destroy('_acl_options');
+				$auth->acl_clear_prefetch();
+
+				return $this->umil_end();
+			break;
+
+			case 'imageset' :
+				if ($style_id == 0)
+				{
+					$return = array();
+					$sql = 'SELECT imageset_id
+						FROM ' . STYLES_IMAGESET_TABLE;
+					$result = $this->db->sql_query($sql);
+					while ($row = $this->db->sql_fetchrow($result))
+					{
+						$return[] = $this->cache_purge('imageset', $row['imageset_id']);
+					}
+					$this->db->sql_freeresult($result);
+
+					return implode('<br /><br />', $return);
+				}
+				else
+				{
+					$sql = 'SELECT *
+						FROM ' . STYLES_IMAGESET_TABLE . "
+						WHERE imageset_id = $style_id";
+					$result = $this->db->sql_query($sql);
+					$imageset_row = $this->db->sql_fetchrow($result);
+					$this->db->sql_freeresult($result);
+
+					if (!$imageset_row)
+					{
+						$this->umil_start('IMAGESET_CACHE_PURGE', 'UNKNOWN');
+						return $this->umil_end('FAIL');
+					}
+
+					$this->umil_start('IMAGESET_CACHE_PURGE', $imageset_row['imageset_name']);
+
+					// The following is from includes/acp/acp_styles.php (edited)
+					$sql_ary = array();
+
+					$cfg_data_imageset = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/imageset.cfg");
+
+					$sql = 'DELETE FROM ' . STYLES_IMAGESET_DATA_TABLE . '
+						WHERE imageset_id = ' . $style_id;
+					$result = $this->db->sql_query($sql);
+
+					foreach ($cfg_data_imageset as $image_name => $value)
+					{
+						if (strpos($value, '*') !== false)
+						{
+							if (substr($value, -1, 1) === '*')
+							{
+								list($image_filename, $image_height) = explode('*', $value);
+								$image_width = 0;
+							}
+							else
+							{
+								list($image_filename, $image_height, $image_width) = explode('*', $value);
+							}
+						}
+						else
+						{
+							$image_filename = $value;
+							$image_height = $image_width = 0;
+						}
+
+						if (strpos($image_name, 'img_') === 0 && $image_filename)
+						{
+							$image_name = substr($image_name, 4);
+
+							$sql_ary[] = array(
+								'image_name'		=> (string) $image_name,
+								'image_filename'	=> (string) $image_filename,
+								'image_height'		=> (int) $image_height,
+								'image_width'		=> (int) $image_width,
+								'imageset_id'		=> (int) $style_id,
+								'image_lang'		=> '',
+							);
+						}
+					}
+
+					$sql = 'SELECT lang_dir
+						FROM ' . LANG_TABLE;
+					$result = $this->db->sql_query($sql);
+
+					while ($row = $this->db->sql_fetchrow($result))
+					{
+						if (@file_exists("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$row['lang_dir']}/imageset.cfg"))
+						{
+							$cfg_data_imageset_data = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$row['lang_dir']}/imageset.cfg");
+							foreach ($cfg_data_imageset_data as $image_name => $value)
+							{
+								if (strpos($value, '*') !== false)
+								{
+									if (substr($value, -1, 1) === '*')
+									{
+										list($image_filename, $image_height) = explode('*', $value);
+										$image_width = 0;
+									}
+									else
+									{
+										list($image_filename, $image_height, $image_width) = explode('*', $value);
+									}
+								}
+								else
+								{
+									$image_filename = $value;
+									$image_height = $image_width = 0;
+								}
+
+								if (strpos($image_name, 'img_') === 0 && $image_filename)
+								{
+									$image_name = substr($image_name, 4);
+									$sql_ary[] = array(
+										'image_name'		=> (string) $image_name,
+										'image_filename'	=> (string) $image_filename,
+										'image_height'		=> (int) $image_height,
+										'image_width'		=> (int) $image_width,
+										'imageset_id'		=> (int) $style_id,
+										'image_lang'		=> (string) $row['lang_dir'],
+									);
+								}
+							}
+						}
+					}
+					$this->db->sql_freeresult($result);
+
+					$this->db->sql_multi_insert(STYLES_IMAGESET_DATA_TABLE, $sql_ary);
+
+					$cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
+
+					return $this->umil_end();
+				}
+			break;
+			//case 'imageset' :
+
+			case 'template' :
+				if ($style_id == 0)
+				{
+					$return = array();
+					$sql = 'SELECT template_id
+						FROM ' . STYLES_TEMPLATE_TABLE;
+					$result = $this->db->sql_query($sql);
+					while ($row = $this->db->sql_fetchrow($result))
+					{
+						$return[] = $this->cache_purge('template', $row['template_id']);
+					}
+					$this->db->sql_freeresult($result);
+
+					return implode('<br /><br />', $return);
+				}
+				else
+				{
+					$sql = 'SELECT *
+						FROM ' . STYLES_TEMPLATE_TABLE . "
+						WHERE template_id = $style_id";
+					$result = $this->db->sql_query($sql);
+					$template_row = $this->db->sql_fetchrow($result);
+					$this->db->sql_freeresult($result);
+
+					if (!$template_row)
+					{
+						$this->umil_start('TEMPLATE_CACHE_PURGE', 'UNKNOWN');
+						return $this->umil_end('FAIL');
+					}
+
+					$this->umil_start('TEMPLATE_CACHE_PURGE', $template_row['template_name']);
+
+					// The following is from includes/acp/acp_styles.php
+					if ($template_row['template_storedb'] && file_exists("{$phpbb_root_path}styles/{$template_row['template_path']}/template/"))
+					{
+						$filelist = array('' => array());
+
+						$sql = 'SELECT template_filename, template_mtime
+							FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
+							WHERE template_id = $style_id";
+						$result = $this->db->sql_query($sql);
+
+						while ($row = $this->db->sql_fetchrow($result))
+						{
+//							if (@filemtime("{$phpbb_root_path}styles/{$template_row['template_path']}/template/" . $row['template_filename']) > $row['template_mtime'])
+//							{
+								// get folder info from the filename
+								if (($slash_pos = strrpos($row['template_filename'], '/')) === false)
+								{
+									$filelist[''][] = $row['template_filename'];
+								}
+								else
+								{
+									$filelist[substr($row['template_filename'], 0, $slash_pos + 1)][] = substr($row['template_filename'], $slash_pos + 1, strlen($row['template_filename']) - $slash_pos - 1);
+								}
+//							}
+						}
+						$this->db->sql_freeresult($result);
+
+						$includes = array();
+						foreach ($filelist as $pathfile => $file_ary)
+						{
+							foreach ($file_ary as $file)
+							{
+								if (!($fp = @fopen("{$phpbb_root_path}styles/{$template_row['template_path']}$pathfile$file", 'r')))
+								{
+									return $this->umil_end('FILE_COULD_NOT_READ', "{$phpbb_root_path}styles/{$template_row['template_path']}$pathfile$file");
+								}
+								$template_data = fread($fp, filesize("{$phpbb_root_path}styles/{$template_row['template_path']}$pathfile$file"));
+								fclose($fp);
+
+								if (preg_match_all('#<!-- INCLUDE (.*?\.html) -->#is', $template_data, $matches))
+								{
+									foreach ($matches[1] as $match)
+									{
+										$includes[trim($match)][] = $file;
+									}
+								}
+							}
+						}
+
+						foreach ($filelist as $pathfile => $file_ary)
+						{
+							foreach ($file_ary as $file)
+							{
+								// Skip index.
+								if (strpos($file, 'index.') === 0)
+								{
+									continue;
+								}
+
+								// We could do this using extended inserts ... but that could be one
+								// heck of a lot of data ...
+								$sql_ary = array(
+									'template_id'			=> (int) $style_id,
+									'template_filename'		=> "$pathfile$file",
+									'template_included'		=> (isset($includes[$file])) ? implode(':', $includes[$file]) . ':' : '',
+									'template_mtime'		=> (int) filemtime("{$phpbb_root_path}styles/{$template_row['template_path']}$pathfile$file"),
+									'template_data'			=> (string) file_get_contents("{$phpbb_root_path}styles/{$template_row['template_path']}$pathfile$file"),
+								);
+
+								$sql = 'UPDATE ' . STYLES_TEMPLATE_DATA_TABLE . ' SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . "
+									WHERE template_id = $style_id
+										AND template_filename = '" . $this->db->sql_escape("$pathfile$file") . "'";
+								$this->db->sql_query($sql);
+							}
+						}
+						unset($filelist);
+					}
+
+					// Purge the forum's cache as well.
+					$cache->purge();
+
+					return $this->umil_end();
+				}
+			break;
+			//case 'template' :
+
+			case 'theme' :
+				if ($style_id == 0)
+				{
+					$return = array();
+					$sql = 'SELECT theme_id
+						FROM ' . STYLES_THEME_TABLE;
+					$result = $this->db->sql_query($sql);
+					while ($row = $this->db->sql_fetchrow($result))
+					{
+						$return[] = $this->cache_purge('theme', $row['theme_id']);
+					}
+					$this->db->sql_freeresult($result);
+
+					return implode('<br /><br />', $return);
+				}
+				else
+				{
+					$sql = 'SELECT *
+						FROM ' . STYLES_THEME_TABLE . "
+						WHERE theme_id = $style_id";
+					$result = $this->db->sql_query($sql);
+					$theme_row = $this->db->sql_fetchrow($result);
+					$this->db->sql_freeresult($result);
+
+					if (!$theme_row)
+					{
+						$this->umil_start('THEME_CACHE_PURGE', 'UNKNOWN');
+						return $this->umil_end('FAIL');
+					}
+
+					$this->umil_start('THEME_CACHE_PURGE', $theme_row['theme_name']);
+
+					// The following is from includes/acp/acp_styles.php
+					if ($theme_row['theme_storedb'] && file_exists("{$phpbb_root_path}styles/{$theme_row['theme_path']}/theme/stylesheet.css"))
+					{
+						$stylesheet = file_get_contents($phpbb_root_path . 'styles/' . $theme_row['theme_path'] . '/theme/stylesheet.css');
+
+						// Match CSS imports
+						$matches = array();
+						preg_match_all('/@import url\(["\'](.*)["\']\);/i', $stylesheet, $matches);
+
+						if (sizeof($matches))
+						{
+							foreach ($matches[0] as $idx => $match)
+							{
+								if (!file_exists("{$phpbb_root_path}styles/{$theme_row['theme_path']}/theme/{$matches[1][$idx]}"))
+								{
+									continue;
+								}
+
+								$content = trim(file_get_contents("{$phpbb_root_path}styles/{$theme_row['theme_path']}/theme/{$matches[1][$idx]}"));
+								$stylesheet = str_replace($match, $content, $stylesheet);
+							}
+						}
+
+						// adjust paths
+						$db_theme_data = str_replace('./', 'styles/' . $theme_row['theme_path'] . '/theme/', $stylesheet);
+
+						// Save CSS contents
+						$sql_ary = array(
+							'theme_mtime'	=> (int) filemtime("{$phpbb_root_path}styles/{$theme_row['theme_path']}/theme/stylesheet.css"),
+							'theme_data'	=> $db_theme_data,
+						);
+
+						$sql = 'UPDATE ' . STYLES_THEME_TABLE . ' SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . "
+							WHERE theme_id = $style_id";
+						$this->db->sql_query($sql);
+
+						$cache->destroy('sql', STYLES_THEME_TABLE);
+					}
+
+					return $this->umil_end();
+				}
+			break;
+			//case 'theme' :
+
+			default:
+				$this->umil_start('CACHE_PURGE');
+				$cache->purge();
+
+				return $this->umil_end();
+			break;
+		}
+	}
+
+	/**
+	* Config Exists
+	*
+	* This function is to check to see if a config variable exists or if it does not.
+	*
+	* @param string $config_name The name of the config setting you wish to check for.
+	* @param bool $return_result - return the config value/default if true : default false.
+	*
+	* @return bool true/false if config exists
+	*/
+	function config_exists($config_name, $return_result = false)
+	{
+		global $config, $cache;
+
+		$sql = 'SELECT *
+				FROM ' . CONFIG_TABLE . "
+				WHERE config_name = '" . $this->db->sql_escape($config_name) . "'";
+		$result = $this->db->sql_query($sql);
+		$row = $this->db->sql_fetchrow($result);
+		$this->db->sql_freeresult($result);
+
+		if ($row)
+		{
+			if (!isset($config[$config_name]))
+			{
+				$config[$config_name] = $row['config_value'];
+
+				if (!$row['is_dynamic'])
+				{
+					$cache->destroy('config');
+				}
+			}
+
+			return ($return_result) ? $row : true;
+		}
+
+		// this should never happen, but if it does, we need to remove the config from the array
+		if (isset($config[$config_name]))
+		{
+			unset($config[$config_name]);
+			$cache->destroy('config');
+		}
+
+		return false;
+	}
+
+	/**
+	* Config Add
+	*
+	* This function allows you to add a config setting.
+	*
+	* @param string $config_name The name of the config setting you would like to add
+	* @param mixed $config_value The value of the config setting
+	* @param bool $is_dynamic True if it is dynamic (changes very often) and should not be stored in the cache, false if not.
+	*
+	* @return result
+	*/
+	function config_add($config_name, $config_value = '', $is_dynamic = false)
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $config_name))
+		{
+			return;
+		}
+
+		$this->umil_start('CONFIG_ADD', $config_name);
+
+		if ($this->config_exists($config_name))
+		{
+			return $this->umil_end('CONFIG_ALREADY_EXISTS', $config_name);
+		}
+
+		set_config($config_name, $config_value, $is_dynamic);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Config Update
+	*
+	* This function allows you to update an existing config setting.
+	*
+	* @param string $config_name The name of the config setting you would like to update
+	* @param mixed $config_value The value of the config setting
+	* @param bool $is_dynamic True if it is dynamic (changes very often) and should not be stored in the cache, false if not.
+	*
+	* @return result
+	*/
+	function config_update($config_name, $config_value = '', $is_dynamic = false)
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $config_name))
+		{
+			return;
+		}
+
+		$this->umil_start('CONFIG_UPDATE', $config_name);
+
+		if (!$this->config_exists($config_name))
+		{
+			return $this->umil_end('CONFIG_NOT_EXIST', $config_name);
+		}
+
+		set_config($config_name, $config_value, $is_dynamic);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Config Remove
+	*
+	* This function allows you to remove an existing config setting.
+	*
+	* @param string $config_name The name of the config setting you would like to remove
+	*
+	* @return result
+	*/
+	function config_remove($config_name)
+	{
+		global $cache, $config;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $config_name))
+		{
+			return;
+		}
+
+		$this->umil_start('CONFIG_REMOVE', $config_name);
+
+		if (!$this->config_exists($config_name))
+		{
+			return $this->umil_end('CONFIG_NOT_EXIST', $config_name);
+		}
+
+		$sql = 'DELETE FROM ' . CONFIG_TABLE . " WHERE config_name = '" . $this->db->sql_escape($config_name) . "'";
+		$this->db->sql_query($sql);
+
+		unset($config[$config_name]);
+		$cache->destroy('config');
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Module Exists
+	*
+	* Check if a module exists
+	*
+	* @param string $class The module class(acp|mcp|ucp)
+	* @param int|string|bool $parent The parent module_id|module_langname (0 for no parent).  Use false to ignore the parent check and check class wide.
+	* @param int|string $module The module_id|module_langname you would like to check for to see if it exists
+	*/
+	function module_exists($class, $parent, $module)
+	{
+		// the main root directory should return true
+		if (!$module)
+		{
+			return true;
+		}
+
+		$class = $this->db->sql_escape($class);
+		$module = $this->db->sql_escape($module);
+
+		$parent_sql = '';
+		if ($parent !== false)
+		{
+			// Allows '' to be sent as 0
+			$parent = (!$parent) ? 0 : $parent;
+
+			if (!is_numeric($parent))
+			{
+				$sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
+					WHERE module_langname = '" . $this->db->sql_escape($parent) . "'
+					AND module_class = '$class'";
+				$result = $this->db->sql_query($sql);
+				$row = $this->db->sql_fetchrow($result);
+				$this->db->sql_freeresult($result);
+
+				if (!$row)
+				{
+					return false;
+				}
+
+				$parent_sql = 'AND parent_id = ' . (int) $row['module_id'];
+			}
+			else
+			{
+				$parent_sql = 'AND parent_id = ' . (int) $parent;
+			}
+		}
+
+		$sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
+			WHERE module_class = '$class'
+			$parent_sql
+			AND " . ((is_numeric($module)) ? 'module_id = ' . (int) $module : "module_langname = '$module'");
+		$result = $this->db->sql_query($sql);
+		$row = $this->db->sql_fetchrow($result);
+		$this->db->sql_freeresult($result);
+
+		if ($row)
+		{
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	* Module Add
+	*
+	* Add a new module
+	*
+	* @param string $class The module class(acp|mcp|ucp)
+	* @param int|string $parent The parent module_id|module_langname (0 for no parent)
+	* @param array $data an array of the data on the new module.  This can be setup in two different ways.
+	*	1. The "manual" way.  For inserting a category or one at a time.  It will be merged with the base array shown a bit below,
+	*		but at the least requires 'module_langname' to be sent, and, if you want to create a module (instead of just a category) you must send module_basename and module_mode.
+	* array(
+	*		'module_enabled'	=> 1,
+	*		'module_display'	=> 1,
+	*		'module_basename'	=> '',
+	*		'module_class'		=> $class,
+	*		'parent_id'			=> (int) $parent,
+	*		'module_langname'	=> '',
+	*		'module_mode'		=> '',
+	*		'module_auth'		=> '',
+	*	)
+	*	2. The "automatic" way.  For inserting multiple at a time based on the specs in the info file for the module(s).  For this to work the modules must be correctly setup in the info file.
+	*		An example follows (this would insert the settings, log, and flag modes from the includes/acp/info/acp_asacp.php file):
+	* array(
+	* 		'module_basename'	=> 'asacp',
+	* 		'modes'				=> array('settings', 'log', 'flag'),
+	* )
+	* 		Optionally you may not send 'modes' and it will insert all of the modules in that info file.
+	*  @param string|bool $include_path If you would like to use a custom include path, specify that here
+	*/
+	function module_add($class, $parent = 0, $data = array(), $include_path = false)
+	{
+		global $cache, $user, $phpbb_root_path, $phpEx;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $class))
+		{
+			return;
+		}
+
+		// Prevent stupid things like trying to add a module with no name or any data on it
+		if (empty($data))
+		{
+			$this->umil_start('MODULE_ADD', $class, 'UNKNOWN');
+			return $this->umil_end('FAIL');
+		}
+
+        // Allows '' to be sent as 0
+		$parent = (!$parent) ? 0 : $parent;
+
+		// allow sending the name as a string in $data to create a category
+		if (!is_array($data))
+		{
+			$data = array('module_langname' => $data);
+		}
+
+		if (!isset($data['module_langname']))
+		{
+			// The "automatic" way
+			$basename = (isset($data['module_basename'])) ? $data['module_basename'] : '';
+			$basename = str_replace(array('/', '\\'), '', $basename);
+			$class = str_replace(array('/', '\\'), '', $class);
+			$info_file = "$class/info/{$class}_$basename.$phpEx";
+
+			// The manual and automatic ways both failed...
+			if (!file_exists((($include_path === false) ? $phpbb_root_path . 'includes/' : $include_path) . $info_file))
+			{
+				$this->umil_start('MODULE_ADD', $class, $info_file);
+				return $this->umil_end('FAIL');
+			}
+
+			$classname = "{$class}_{$basename}_info";
+
+			if (!class_exists($classname))
+			{
+				include((($include_path === false) ? $phpbb_root_path . 'includes/' : $include_path) . $info_file);
+			}
+
+			$info = new $classname;
+			$module = $info->module();
+			unset($info);
+
+			$result = '';
+			foreach ($module['modes'] as $mode => $module_info)
+			{
+				if (!isset($data['modes']) || in_array($mode, $data['modes']))
+				{
+					$new_module = array(
+						'module_basename'	=> $basename,
+						'module_langname'	=> $module_info['title'],
+						'module_mode'		=> $mode,
+						'module_auth'		=> $module_info['auth'],
+						'module_display'	=> (isset($module_info['display'])) ? $module_info['display'] : true,
+						'before'			=> (isset($module_info['before'])) ? $module_info['before'] : false,
+						'after'				=> (isset($module_info['after'])) ? $module_info['after'] : false,
+					);
+
+					// Run the "manual" way with the data we've collected.
+					$result .= ((isset($data['spacer'])) ? $data['spacer'] : '<br />') . $this->module_add($class, $parent, $new_module);
+				}
+			}
+
+			return $result;
+		}
+
+		// The "manual" way
+		$this->umil_start('MODULE_ADD', $class, ((isset($user->lang[$data['module_langname']])) ? $user->lang[$data['module_langname']] : $data['module_langname']));
+		add_log('admin', 'LOG_MODULE_ADD', ((isset($user->lang[$data['module_langname']])) ? $user->lang[$data['module_langname']] : $data['module_langname']));
+
+		$class = $this->db->sql_escape($class);
+
+		if (!is_numeric($parent))
+		{
+			$sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
+				WHERE module_langname = '" . $this->db->sql_escape($parent) . "'
+				AND module_class = '$class'";
+			$result = $this->db->sql_query($sql);
+			$row = $this->db->sql_fetchrow($result);
+			$this->db->sql_freeresult($result);
+
+			if (!$row)
+			{
+				return $this->umil_end('PARENT_NOT_EXIST');
+			}
+
+			$parent = $data['parent_id'] = $row['module_id'];
+		}
+		else if (!$this->module_exists($class, false, $parent))
+		{
+			return $this->umil_end('PARENT_NOT_EXIST');
+		}
+
+		if ($this->module_exists($class, $parent, $data['module_langname']))
+		{
+			return $this->umil_end('MODULE_ALREADY_EXIST');
+		}
+
+		if (!class_exists('acp_modules'))
+		{
+			include($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx);
+			$user->add_lang('acp/modules');
+		}
+		$acp_modules = new acp_modules();
+
+		$module_data = array(
+			'module_enabled'	=> (isset($data['module_enabled'])) ? $data['module_enabled'] : 1,
+			'module_display'	=> (isset($data['module_display'])) ? $data['module_display'] : 1,
+			'module_basename'	=> (isset($data['module_basename'])) ? $data['module_basename'] : '',
+			'module_class'		=> $class,
+			'parent_id'			=> (int) $parent,
+			'module_langname'	=> (isset($data['module_langname'])) ? $data['module_langname'] : '',
+			'module_mode'		=> (isset($data['module_mode'])) ? $data['module_mode'] : '',
+			'module_auth'		=> (isset($data['module_auth'])) ? $data['module_auth'] : '',
+		);
+		$result = $acp_modules->update_module_data($module_data, true);
+
+		// update_module_data can either return a string or an empty array...
+		if (is_string($result))
+		{
+			// Error
+			$this->result = $this->get_output_text($result);
+		}
+		else
+		{
+			// Success
+
+			// Move the module if requested above/below an existing one
+			if (isset($data['before']) && $data['before'])
+			{
+				$sql = 'SELECT left_id FROM ' . MODULES_TABLE . '
+					WHERE module_class = \'' . $class . '\'
+					AND parent_id = ' . (int) $parent . '
+					AND module_langname = \'' . $this->db->sql_escape($data['before']) . '\'';
+				$this->db->sql_query($sql);
+				$to_left = $this->db->sql_fetchfield('left_id');
+
+				$sql = 'UPDATE ' . MODULES_TABLE . " SET left_id = left_id + 2, right_id = right_id + 2
+					WHERE module_class = '$class'
+					AND left_id >= $to_left
+					AND left_id < {$module_data['left_id']}";
+				$this->db->sql_query($sql);
+
+				$sql = 'UPDATE ' . MODULES_TABLE . " SET left_id = $to_left, right_id = " . ($to_left + 1) . "
+					WHERE module_class = '$class'
+					AND module_id = {$module_data['module_id']}";
+				$this->db->sql_query($sql);
+			}
+			else if (isset($data['after']) && $data['after'])
+			{
+				$sql = 'SELECT right_id FROM ' . MODULES_TABLE . '
+					WHERE module_class = \'' . $class . '\'
+					AND parent_id = ' . (int) $parent . '
+					AND module_langname = \'' . $this->db->sql_escape($data['after']) . '\'';
+				$this->db->sql_query($sql);
+				$to_right = $this->db->sql_fetchfield('right_id');
+
+				$sql = 'UPDATE ' . MODULES_TABLE . " SET left_id = left_id + 2, right_id = right_id + 2
+					WHERE module_class = '$class'
+					AND left_id >= $to_right
+					AND left_id < {$module_data['left_id']}";
+				$this->db->sql_query($sql);
+
+				$sql = 'UPDATE ' . MODULES_TABLE . ' SET left_id = ' . ($to_right + 1) . ', right_id = ' . ($to_right + 2) . "
+					WHERE module_class = '$class'
+					AND module_id = {$module_data['module_id']}";
+				$this->db->sql_query($sql);
+			}
+		}
+
+		// Clear the Modules Cache
+		$cache->destroy("_modules_$class");
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Module Remove
+	*
+	* Remove a module
+	*
+	* @param string $class The module class(acp|mcp|ucp)
+	* @param int|string|bool $parent The parent module_id|module_langname (0 for no parent).  Use false to ignore the parent check and check class wide.
+	* @param int|string $module The module id|module_langname
+	* @param string|bool $include_path If you would like to use a custom include path, specify that here
+	*/
+	function module_remove($class, $parent = 0, $module = '', $include_path = false)
+	{
+		global $cache, $user, $phpbb_root_path, $phpEx;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $class))
+		{
+			return;
+		}
+
+		// Imitation of module_add's "automatic" and "manual" method so the uninstaller works from the same set of instructions for umil_auto
+		if (is_array($module))
+		{
+			if (isset($module['module_langname']))
+			{
+				// Manual Method
+				return $this->module_remove($class, $parent, $module['module_langname'], $include_path);
+			}
+
+			// Failed.
+			if (!isset($module['module_basename']))
+			{
+				$this->umil_start('MODULE_REMOVE', $class, 'UNKNOWN');
+				return $this->umil_end('FAIL');
+			}
+
+			// Automatic method
+			$basename = str_replace(array('/', '\\'), '', $module['module_basename']);
+			$class = str_replace(array('/', '\\'), '', $class);
+			$info_file = "$class/info/{$class}_$basename.$phpEx";
+
+			if (!file_exists((($include_path === false) ? $phpbb_root_path . 'includes/' : $include_path) . $info_file))
+			{
+				$this->umil_start('MODULE_REMOVE', $class, $info_file);
+				return $this->umil_end('FAIL');
+			}
+
+			$classname = "{$class}_{$basename}_info";
+
+			if (!class_exists($classname))
+			{
+				include((($include_path === false) ? $phpbb_root_path . 'includes/' : $include_path) . $info_file);
+			}
+
+			$info = new $classname;
+			$module_info = $info->module();
+			unset($info);
+
+			$result = '';
+			foreach ($module_info['modes'] as $mode => $info)
+			{
+				if (!isset($module['modes']) || in_array($mode, $module['modes']))
+				{
+					$result .= $this->module_remove($class, $parent, $info['title']) . '<br />';
+				}
+			}
+			return $result;
+		}
+		else
+		{
+			$class = $this->db->sql_escape($class);
+
+			if (!$this->module_exists($class, $parent, $module))
+			{
+				$this->umil_start('MODULE_REMOVE', $class, ((isset($user->lang[$module])) ? $user->lang[$module] : $module));
+				return $this->umil_end('MODULE_NOT_EXIST');
+			}
+
+			$parent_sql = '';
+			if ($parent !== false)
+			{
+				// Allows '' to be sent as 0
+				$parent = (!$parent) ? 0 : $parent;
+
+				if (!is_numeric($parent))
+				{
+					$sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
+						WHERE module_langname = '" . $this->db->sql_escape($parent) . "'
+						AND module_class = '$class'";
+					$result = $this->db->sql_query($sql);
+					$row = $this->db->sql_fetchrow($result);
+					$this->db->sql_freeresult($result);
+
+					// we know it exists from the module_exists check
+					$parent_sql = 'AND parent_id = ' . (int) $row['module_id'];
+				}
+				else
+				{
+					$parent_sql = 'AND parent_id = ' . (int) $parent;
+				}
+			}
+
+			$module_ids = array();
+			if (!is_numeric($module))
+			{
+				$module = $this->db->sql_escape($module);
+				$sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
+					WHERE module_langname = '$module'
+					AND module_class = '$class'
+					$parent_sql";
+				$result = $this->db->sql_query($sql);
+				while ($row = $this->db->sql_fetchrow($result))
+				{
+					$module_ids[] = (int) $row['module_id'];
+				}
+				$this->db->sql_freeresult($result);
+
+				$module_name = $module;
+			}
+			else
+			{
+				$module = (int) $module;
+				$sql = 'SELECT module_langname FROM ' . MODULES_TABLE . "
+					WHERE module_id = $module
+					AND module_class = '$class'
+					$parent_sql";
+				$result = $this->db->sql_query($sql);
+				$row = $this->db->sql_fetchrow($result);
+				$this->db->sql_freeresult($result);
+
+				$module_name = $row['module_langname'];
+				$module_ids[] = $module;
+			}
+
+			$this->umil_start('MODULE_REMOVE', $class, ((isset($user->lang[$module_name])) ? $user->lang[$module_name] : $module_name));
+			add_log('admin', 'LOG_MODULE_REMOVED', ((isset($user->lang[$module_name])) ? $user->lang[$module_name] : $module_name));
+
+			if (!class_exists('acp_modules'))
+			{
+				include($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx);
+				$user->add_lang('acp/modules');
+			}
+			$acp_modules = new acp_modules();
+			$acp_modules->module_class = $class;
+
+			foreach ($module_ids as $module_id)
+			{
+				$result = $acp_modules->delete_module($module_id);
+				if (!empty($result))
+				{
+					if ($this->result == ((isset($user->lang['SUCCESS'])) ? $user->lang['SUCCESS'] : 'SUCCESS'))
+					{
+						$this->result = implode('<br />', $result);
+					}
+					else
+					{
+						$this->result .= '<br />' . implode('<br />', $result);
+					}
+				}
+			}
+
+			$cache->destroy("_modules_$class");
+
+			return $this->umil_end();
+		}
+	}
+
+	/**
+	* Permission Exists
+	*
+	* Check if a permission (auth) setting exists
+	*
+	* @param string $auth_option The name of the permission (auth) option
+	* @param bool $global True for checking a global permission setting, False for a local permission setting
+	*
+	* @return bool true if it exists, false if not
+	*/
+	function permission_exists($auth_option, $global = true)
+	{
+		if ($global)
+		{
+			$type_sql = ' AND is_global = 1';
+		}
+		else
+		{
+			$type_sql = ' AND is_local = 1';
+		}
+
+		$sql = 'SELECT auth_option_id
+				FROM ' . ACL_OPTIONS_TABLE . "
+				WHERE auth_option = '" . $this->db->sql_escape($auth_option) . "'"
+				. $type_sql;
+		$result = $this->db->sql_query($sql);
+
+		$row = $this->db->sql_fetchrow($result);
+		$this->db->sql_freeresult($result);
+
+		if ($row)
+		{
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	* Permission Add
+	*
+	* Add a permission (auth) option
+	*
+	* @param string $auth_option The name of the permission (auth) option
+	* @param bool $global True for checking a global permission setting, False for a local permission setting
+	*
+	* @return result
+	*/
+	function permission_add($auth_option, $global = true)
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $auth_option))
+		{
+			return;
+		}
+
+		$this->umil_start('PERMISSION_ADD', $auth_option);
+
+		if ($this->permission_exists($auth_option, $global))
+		{
+			return $this->umil_end('PERMISSION_ALREADY_EXISTS', $auth_option);
+		}
+
+		// We've added permissions, so set to true to notify the user.
+		$this->permissions_added = true;
+
+		if (!class_exists('auth_admin'))
+		{
+			global $phpbb_root_path, $phpEx;
+
+			include($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
+		}
+		$auth_admin = new auth_admin();
+
+		// We have to add a check to see if the !$global (if global, local, and if local, global) permission already exists.  If it does, acl_add_option currently has a bug which would break the ACL system, so we are having a work-around here.
+		if ($this->permission_exists($auth_option, !$global))
+		{
+			$sql_ary = array(
+				'is_global'	=> 1,
+				'is_local'	=> 1,
+			);
+			$sql = 'UPDATE ' . ACL_OPTIONS_TABLE . '
+				SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . '
+				WHERE auth_option = \'' . $this->db->sql_escape($auth_option) . "'";
+			$this->db->sql_query($sql);
+		}
+		else
+		{
+			if ($global)
+			{
+				$auth_admin->acl_add_option(array('global' => array($auth_option)));
+			}
+			else
+			{
+				$auth_admin->acl_add_option(array('local' => array($auth_option)));
+			}
+		}
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Permission Remove
+	*
+	* Remove a permission (auth) option
+	*
+	* @param string $auth_option The name of the permission (auth) option
+	* @param bool $global True for checking a global permission setting, False for a local permission setting
+	*
+	* @return result
+	*/
+	function permission_remove($auth_option, $global = true)
+	{
+		global $auth, $cache;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $auth_option))
+		{
+			return;
+		}
+
+		$this->umil_start('PERMISSION_REMOVE', $auth_option);
+
+		if (!$this->permission_exists($auth_option, $global))
+		{
+			return $this->umil_end('PERMISSION_NOT_EXIST', $auth_option);
+		}
+
+		if ($global)
+		{
+			$type_sql = ' AND is_global = 1';
+		}
+		else
+		{
+			$type_sql = ' AND is_local = 1';
+		}
+		$sql = 'SELECT auth_option_id, is_global, is_local FROM ' . ACL_OPTIONS_TABLE . "
+			WHERE auth_option = '" . $this->db->sql_escape($auth_option) . "'" .
+			$type_sql;
+		$result = $this->db->sql_query($sql);
+		$row = $this->db->sql_fetchrow($result);
+		$this->db->sql_freeresult($result);
+
+		$id = $row['auth_option_id'];
+
+		// If it is a local and global permission, do not remove the row! :P
+		if ($row['is_global'] && $row['is_local'])
+		{
+			$sql = 'UPDATE ' . ACL_OPTIONS_TABLE . '
+				SET ' . (($global) ? 'is_global = 0' : 'is_local = 0') . '
+				WHERE auth_option_id = ' . $id;
+			$this->db->sql_query($sql);
+		}
+		else
+		{
+			// Delete time
+			$this->db->sql_query('DELETE FROM ' . ACL_GROUPS_TABLE . ' WHERE auth_option_id = ' . $id);
+			$this->db->sql_query('DELETE FROM ' . ACL_ROLES_DATA_TABLE . ' WHERE auth_option_id = ' . $id);
+			$this->db->sql_query('DELETE FROM ' . ACL_USERS_TABLE . ' WHERE auth_option_id = ' . $id);
+			$this->db->sql_query('DELETE FROM ' . ACL_OPTIONS_TABLE . ' WHERE auth_option_id = ' . $id);
+		}
+
+		// Purge the auth cache
+		$cache->destroy('_acl_options');
+		$auth->acl_clear_prefetch();
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Add a new permission role
+	*
+	* @param string $role_name The new role name
+	* @param sting $role_type The type (u_, m_, a_)
+	*/
+	function permission_role_add($role_name, $role_type = '', $role_description = '')
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $role_name))
+		{
+			return;
+		}
+
+		$this->umil_start('PERMISSION_ROLE_ADD', $role_name);
+
+		$sql = 'SELECT role_id FROM ' . ACL_ROLES_TABLE . '
+			WHERE role_name = \'' . $this->db->sql_escape($role_name) . '\'';
+		$this->db->sql_query($sql);
+		$role_id = $this->db->sql_fetchfield('role_id');
+
+		if ($role_id)
+		{
+			return $this->umil_end('ROLE_ALREADY_EXISTS', $old_role_name);
+		}
+
+		$sql = 'SELECT MAX(role_order) AS max FROM ' . ACL_ROLES_TABLE . '
+			WHERE role_type = \'' . $this->db->sql_escape($role_type) . '\'';
+		$this->db->sql_query($sql);
+		$role_order = $this->db->sql_fetchfield('max');
+		$role_order = (!$role_order) ? 1 : $role_order + 1;
+
+		$sql_ary = array(
+			'role_name'			=> $role_name,
+			'role_description'	=> $role_description,
+			'role_type'			=> $role_type,
+			'role_order'		=> $role_order,
+		);
+
+		$sql = 'INSERT INTO ' . ACL_ROLES_TABLE . ' ' . $this->db->sql_build_array('INSERT', $sql_ary);
+		$this->db->sql_query($sql);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Update the name on a permission role
+	*
+	* @param string $old_role_name The old role name
+	* @param string $new_role_name The new role name
+	*/
+	function permission_role_update($old_role_name, $new_role_name = '')
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $role_name))
+		{
+			return;
+		}
+
+		$this->umil_start('PERMISSION_ROLE_UPDATE', $old_role_name);
+
+		$sql = 'SELECT role_id FROM ' . ACL_ROLES_TABLE . '
+			WHERE role_name = \'' . $this->db->sql_escape($old_role_name) . '\'';
+		$this->db->sql_query($sql);
+		$role_id = $this->db->sql_fetchfield('role_id');
+
+		if (!$role_id)
+		{
+			return $this->umil_end('ROLE_NOT_EXIST', $old_role_name);
+		}
+
+		$sql = 'UPDATE ' . ACL_ROLES_TABLE . '
+			SET role_name = \'' . $this->db->sql_escape($new_role_name) . '\'
+			WHERE role_name = \'' . $this->db->sql_escape($old_role_name) . '\'';
+		$this->db->sql_query($sql);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Remove a permission role
+	*
+	* @param string $role_name The role name to remove
+	*/
+	function permission_role_remove($role_name)
+	{
+		global $auth;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $role_name))
+		{
+			return;
+		}
+
+		$this->umil_start('PERMISSION_ROLE_REMOVE', $role_name);
+
+		$sql = 'SELECT role_id FROM ' . ACL_ROLES_TABLE . '
+			WHERE role_name = \'' . $this->db->sql_escape($role_name) . '\'';
+		$this->db->sql_query($sql);
+		$role_id = $this->db->sql_fetchfield('role_id');
+
+		if (!$role_id)
+		{
+			return $this->umil_end('ROLE_NOT_EXIST', $role_name);
+		}
+
+		$sql = 'DELETE FROM ' . ACL_ROLES_DATA_TABLE . '
+			WHERE role_id = ' . $role_id;
+		$this->db->sql_query($sql);
+
+		$sql = 'DELETE FROM ' . ACL_ROLES_TABLE . '
+			WHERE role_id = ' . $role_id;
+		$this->db->sql_query($sql);
+
+		$auth->acl_clear_prefetch();
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Permission Set
+	*
+	* Allows you to set permissions for a certain group/role
+	*
+	* @param string $name The name of the role/group
+	* @param string|array $auth_option The auth_option or array of auth_options you would like to set
+	* @param string $type The type (role|group)
+	* @param bool $has_permission True if you want to give them permission, false if you want to deny them permission
+	*/
+	function permission_set($name, $auth_option = array(), $type = 'role', $has_permission = true)
+	{
+		global $auth;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $name))
+		{
+			return;
+		}
+
+		if (!is_array($auth_option))
+		{
+			$auth_option = array($auth_option);
+		}
+
+		$new_auth = array();
+		$sql = 'SELECT auth_option_id FROM ' . ACL_OPTIONS_TABLE . '
+			WHERE ' . $this->db->sql_in_set('auth_option', $auth_option);
+		$result = $this->db->sql_query($sql);
+		while ($row = $this->db->sql_fetchrow($result))
+		{
+			$new_auth[] = $row['auth_option_id'];
+		}
+		$this->db->sql_freeresult($result);
+
+		if (!sizeof($new_auth))
+		{
+			return false;
+		}
+
+		$current_auth = array();
+
+		$type = (string) $type; // Prevent PHP bug.
+
+		switch ($type)
+		{
+			case 'role' :
+				$this->umil_start('PERMISSION_SET_ROLE', $name);
+
+				$sql = 'SELECT role_id FROM ' . ACL_ROLES_TABLE . '
+					WHERE role_name = \'' . $this->db->sql_escape($name) . '\'';
+				$this->db->sql_query($sql);
+				$role_id = $this->db->sql_fetchfield('role_id');
+
+				if (!$role_id)
+				{
+					return $this->umil_end('ROLE_NOT_EXIST');
+				}
+
+				$sql = 'SELECT auth_option_id, auth_setting FROM ' . ACL_ROLES_DATA_TABLE . '
+					WHERE role_id = ' . $role_id;
+				$result = $this->db->sql_query($sql);
+				while ($row = $this->db->sql_fetchrow($result))
+				{
+					$current_auth[$row['auth_option_id']] = $row['auth_setting'];
+				}
+				$this->db->sql_freeresult($result);
+			break;
+
+			case 'group' :
+				$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . ' WHERE group_name = \'' . $this->db->sql_escape($name) . '\'';
+				$this->db->sql_query($sql);
+				$group_id = $this->db->sql_fetchfield('group_id');
+
+				if (!$group_id)
+				{
+					$this->umil_start('PERMISSION_SET_GROUP', $name);
+					return $this->umil_end('GROUP_NOT_EXIST');
+				}
+
+				// If the group has a role set for them we will add the requested permissions to that role.
+				$sql = 'SELECT auth_role_id FROM ' . ACL_GROUPS_TABLE . '
+					WHERE group_id = ' . $group_id . '
+					AND auth_role_id <> 0
+					AND forum_id = 0';
+				$this->db->sql_query($sql);
+				$role_id = $this->db->sql_fetchfield('auth_role_id');
+				if ($role_id)
+				{
+					$sql = 'SELECT role_name FROM ' . ACL_ROLES_TABLE . '
+						WHERE role_id = ' . $role_id;
+					$this->db->sql_query($sql);
+					$role_name = $this->db->sql_fetchfield('role_name');
+
+					return $this->permission_set($role_name, $auth_option, 'role', $has_permission);
+				}
+
+				$this->umil_start('PERMISSION_SET_GROUP', $name);
+
+				$sql = 'SELECT auth_option_id, auth_setting FROM ' . ACL_GROUPS_TABLE . '
+					WHERE group_id = ' . $group_id;
+				$result = $this->db->sql_query($sql);
+				while ($row = $this->db->sql_fetchrow($result))
+				{
+					$current_auth[$row['auth_option_id']] = $row['auth_setting'];
+				}
+				$this->db->sql_freeresult($result);
+			break;
+		}
+
+		$sql_ary = array();
+		switch ($type)
+		{
+			case 'role' :
+				foreach ($new_auth as $auth_option_id)
+				{
+					if (!isset($current_auth[$auth_option_id]))
+					{
+						$sql_ary[] = array(
+							'role_id'			=> $role_id,
+							'auth_option_id'	=> $auth_option_id,
+							'auth_setting'		=> $has_permission,
+				        );
+					}
+				}
+
+				$this->db->sql_multi_insert(ACL_ROLES_DATA_TABLE, $sql_ary);
+			break;
+
+			case 'group' :
+				foreach ($new_auth as $auth_option_id)
+				{
+					if (!isset($current_auth[$auth_option_id]))
+					{
+						$sql_ary[] = array(
+							'group_id'			=> $group_id,
+							'auth_option_id'	=> $auth_option_id,
+							'auth_setting'		=> $has_permission,
+				        );
+					}
+				}
+
+				$this->db->sql_multi_insert(ACL_GROUPS_TABLE, $sql_ary);
+			break;
+		}
+
+		$auth->acl_clear_prefetch();
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Permission Unset
+	*
+	* Allows you to unset (remove) permissions for a certain group/role
+	*
+	* @param string $name The name of the role/group
+	* @param string|array $auth_option The auth_option or array of auth_options you would like to set
+	* @param string $type The type (role|group)
+	*/
+	function permission_unset($name, $auth_option = array(), $type = 'role')
+	{
+		global $auth;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $name))
+		{
+			return;
+		}
+
+		if (!is_array($auth_option))
+		{
+			$auth_option = array($auth_option);
+		}
+
+		$to_remove = array();
+		$sql = 'SELECT auth_option_id FROM ' . ACL_OPTIONS_TABLE . '
+			WHERE ' . $this->db->sql_in_set('auth_option', $auth_option);
+		$result = $this->db->sql_query($sql);
+		while ($row = $this->db->sql_fetchrow($result))
+		{
+			$to_remove[] = $row['auth_option_id'];
+		}
+		$this->db->sql_freeresult($result);
+
+		if (!sizeof($to_remove))
+		{
+			return false;
+		}
+
+		$type = (string) $type; // Prevent PHP bug.
+
+		switch ($type)
+		{
+			case 'role' :
+				$this->umil_start('PERMISSION_UNSET_ROLE', $name);
+
+				$sql = 'SELECT role_id FROM ' . ACL_ROLES_TABLE . '
+					WHERE role_name = \'' . $this->db->sql_escape($name) . '\'';
+				$this->db->sql_query($sql);
+				$role_id = $this->db->sql_fetchfield('role_id');
+
+				if (!$role_id)
+				{
+					return $this->umil_end('ROLE_NOT_EXIST');
+				}
+
+				$sql = 'DELETE FROM ' . ACL_ROLES_DATA_TABLE . '
+					WHERE ' . $this->db->sql_in_set('auth_option_id', $to_remove);
+				$this->db->sql_query($sql);
+			break;
+
+			case 'group' :
+				$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . ' WHERE group_name = \'' . $this->db->sql_escape($name) . '\'';
+				$this->db->sql_query($sql);
+				$group_id = $this->db->sql_fetchfield('group_id');
+
+				if (!$group_id)
+				{
+					$this->umil_start('PERMISSION_UNSET_GROUP', $name);
+					return $this->umil_end('GROUP_NOT_EXIST');
+				}
+
+				// If the group has a role set for them we will remove the requested permissions from that role.
+				$sql = 'SELECT auth_role_id FROM ' . ACL_GROUPS_TABLE . '
+					WHERE group_id = ' . $group_id . '
+					AND auth_role_id <> 0';
+				$this->db->sql_query($sql);
+				$role_id = $this->db->sql_fetchfield('auth_role_id');
+				if ($role_id)
+				{
+					$sql = 'SELECT role_name FROM ' . ACL_ROLES_TABLE . '
+						WHERE role_id = ' . $role_id;
+					$this->db->sql_query($sql);
+					$role_name = $this->db->sql_fetchfield('role_name');
+
+					return $this->permission_unset($role_name, $auth_option, 'role');
+				}
+
+				$this->umil_start('PERMISSION_UNSET_GROUP', $name);
+
+				$sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '
+					WHERE ' . $this->db->sql_in_set('auth_option_id', $to_remove);
+				$this->db->sql_query($sql);
+			break;
+		}
+
+		$auth->acl_clear_prefetch();
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Exists
+	*
+	* Check if a table exists in the DB or not
+	*
+	* @param string $table_name The table name to check for
+	*
+	* @return bool true if the table exists, false if not
+	*/
+	function table_exists($table_name)
+	{
+		$this->get_table_name($table_name);
+
+		// Use sql_table_exists if available
+		if (method_exists($this->db_tools, 'sql_table_exists'))
+		{
+			$roe = $this->db->return_on_error;
+			$result = $this->db_tools->sql_table_exists($table_name);
+
+			// db_tools::sql_table_exists resets the return_on_error to false always after completing, so we must make sure we set it to true again if it was before
+			if ($roe)
+			{
+				$this->db->sql_return_on_error(true);
+			}
+
+			return $result;
+		}
+
+		if (!function_exists('get_tables'))
+		{
+			global $phpbb_root_path, $phpEx;
+			include($phpbb_root_path . 'includes/functions_install.' . $phpEx);
+		}
+
+		$tables = get_tables($this->db);
+
+		if (in_array($table_name, $tables))
+		{
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+	/**
+	* Table Add
+	*
+	* This only supports input from the array format of db_tools or create_schema_files.
+	*/
+	function table_add($table_name, $table_data = array())
+	{
+		global $dbms, $user;
+
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		/**
+		* $table_data can be empty when uninstalling a mod and table_remove was used, but no 2rd argument was given.
+		* In that case we'll assume that it was a column previously added by the mod (if not the author should specify a 2rd argument) and skip this to prevent an error
+		*/
+		if (empty($table_data))
+		{
+			return;
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_ADD', $table_name);
+
+		if ($this->table_exists($table_name))
+		{
+			return $this->umil_end('TABLE_ALREADY_EXISTS', $table_name);
+		}
+
+		if (!is_array($table_data))
+		{
+			return $this->umil_end('NO_TABLE_DATA');
+		}
+
+		if (!function_exists('get_available_dbms'))
+		{
+			global $phpbb_root_path, $phpEx;
+			include("{$phpbb_root_path}includes/functions_install.$phpEx");
+		}
+
+		/*
+		* This function has had numerous problems and is currently broken, so until phpBB uses it I will not be anymore
+		if (method_exists($this->db_tools, 'sql_create_table'))
+		{
+			// Added in 3.0.5
+			$this->db_tools->sql_create_table($table_name, $table_data);
+		}
+		else
+		{*/
+			$available_dbms = get_available_dbms($dbms);
+
+			$sql_query = $this->create_table_sql($table_name, $table_data);
+			$sql_query = split_sql_file($sql_query, $available_dbms[$dbms]['DELIM']);
+
+			foreach ($sql_query as $sql)
+			{
+				$this->db->sql_query($sql);
+			}
+		//}
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Remove
+	*
+	* Delete/Drop a DB table
+	*/
+	function table_remove($table_name)
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_REMOVE', $table_name);
+
+		if (!$this->table_exists($table_name))
+		{
+			return $this->umil_end('TABLE_NOT_EXIST', $table_name);
+		}
+
+		if (method_exists($this->db_tools, 'sql_table_drop'))
+		{
+			// Added in 3.0.5
+			$this->db_tools->sql_table_drop($table_name);
+		}
+		else
+		{
+			$this->db->sql_query('DROP TABLE ' . $table_name);
+		}
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Column Exists
+	*
+	* Check to see if a column exists in a table
+	*/
+	function table_column_exists($table_name, $column_name)
+	{
+		$this->get_table_name($table_name);
+
+		return $this->db_tools->sql_column_exists($table_name, $column_name);
+	}
+
+	/**
+	* Table Column Add
+	*
+	* Add a new column to a table.
+	*/
+	function table_column_add($table_name, $column_name = '', $column_data = array())
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		/**
+		* $column_data can be empty when uninstalling a mod and table_column_remove was used, but no 3rd argument was given.
+		* In that case we'll assume that it was a column previously added by the mod (if not the author should specify a 3rd argument) and skip this to prevent an error
+		*/
+		if (empty($column_data))
+		{
+			return;
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_COLUMN_ADD', $table_name, $column_name);
+
+		if ($this->table_column_exists($table_name, $column_name))
+		{
+			return $this->umil_end('TABLE_COLUMN_ALREADY_EXISTS', $table_name, $column_name);
+		}
+
+		$this->db_tools->sql_column_add($table_name, $column_name, $column_data);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Column Update
+	*
+	* Alter/Update a column in a table.  You can not change a column name with this.
+	*/
+	function table_column_update($table_name, $column_name = '', $column_data = array())
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_COLUMN_UPDATE', $table_name, $column_name);
+
+		if (!$this->table_column_exists($table_name, $column_name))
+		{
+			return $this->umil_end('TABLE_COLUMN_NOT_EXIST', $table_name, $column_name);
+		}
+
+		$this->db_tools->sql_column_change($table_name, $column_name, $column_data);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Column Remove
+	*
+	* Remove a column from a table
+	*/
+	function table_column_remove($table_name, $column_name = '')
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_COLUMN_REMOVE', $table_name, $column_name);
+
+		if (!$this->table_column_exists($table_name, $column_name))
+		{
+			return $this->umil_end('TABLE_COLUMN_NOT_EXIST', $table_name, $column_name);
+		}
+
+		$this->db_tools->sql_column_remove($table_name, $column_name);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Index Exists
+	*
+	* Check if a table key/index exists on a table (can not check primary or unique)
+	*/
+	function table_index_exists($table_name, $index_name)
+	{
+		$this->get_table_name($table_name);
+
+		$indexes = $this->db_tools->sql_list_index($table_name);
+
+		if (in_array($index_name, $indexes))
+		{
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	* Table Index Add
+	*
+	* Add a new key/index to a table
+	*/
+	function table_index_add($table_name, $index_name = '', $column = array())
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		// Let them skip the column field and just use the index name in that case as the column as well
+		if (empty($column))
+		{
+			$column = array($index_name);
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_KEY_ADD', $table_name, $index_name);
+
+		if ($this->table_index_exists($table_name, $index_name))
+		{
+			return $this->umil_end('TABLE_KEY_ALREADY_EXIST', $table_name, $index_name);
+		}
+
+		if (!is_array($column))
+		{
+			$column = array($column);
+		}
+
+		$this->db_tools->sql_create_index($table_name, $index_name, $column);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Index Remove
+	*
+	* Remove a key/index from a table
+	*/
+	function table_index_remove($table_name, $index_name = '')
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_KEY_REMOVE', $table_name, $index_name);
+
+		if (!$this->table_index_exists($table_name, $index_name))
+		{
+			return $this->umil_end('TABLE_KEY_NOT_EXIST', $table_name, $index_name);
+		}
+
+		$this->db_tools->sql_index_drop($table_name, $index_name);
+
+		return $this->umil_end();
+	}
+
+	// Ignore, function was renamed to table_row_insert and keeping for backwards compatibility
+	function table_insert($table_name, $data = array()) { $this->table_row_insert($table_name, $data); }
+
+	/**
+	* Table Insert
+	*
+	* Insert data into a table
+	*/
+	function table_row_insert($table_name, $data = array())
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_ROW_INSERT_DATA', $table_name);
+
+		if (!$this->table_exists($table_name))
+		{
+			return $this->umil_end('TABLE_NOT_EXIST', $table_name);
+		}
+
+		$this->db->sql_multi_insert($table_name, $data);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Row Update
+	*
+	* Update a row in a table
+	*
+	* $data should be an array with the column names as keys and values as the items to check for each column.  Example:
+	* array('user_id' => 123, 'user_name' => 'test user') would become:
+	* WHERE user_id = 123 AND user_name = 'test user'
+	*
+	* $new_data is the new data it will be updated to (same format as you'd enter into $db->sql_build_array('UPDATE' ).
+	*/
+	function table_row_update($table_name, $data = array(), $new_data = array())
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		if (!sizeof($data))
+		{
+			return $this->umil_end('FAIL');
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_ROW_UPDATE_DATA', $table_name);
+
+		if (!$this->table_exists($table_name))
+		{
+			return $this->umil_end('TABLE_NOT_EXIST', $table_name);
+		}
+
+		$sql = 'UPDATE ' . $table_name . '
+			SET ' . $this->db->sql_build_array('UPDATE', $new_data) . '
+			WHERE ' . $this->db->sql_build_array('SELECT', $data);
+		$this->db->sql_query($sql);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Table Row Remove
+	*
+	* Remove a row from a table
+	*
+	* $data should be an array with the column names as keys and values as the items to check for each column.  Example:
+	* array('user_id' => 123, 'user_name' => 'test user') would become:
+	* WHERE user_id = 123 AND user_name = 'test user'
+	*/
+	function table_row_remove($table_name, $data = array())
+	{
+		// Multicall
+		if ($this->multicall(__FUNCTION__, $table_name))
+		{
+			return;
+		}
+
+		if (!sizeof($data))
+		{
+			return $this->umil_end('FAIL');
+		}
+
+		$this->get_table_name($table_name);
+
+		$this->umil_start('TABLE_ROW_REMOVE_DATA', $table_name);
+
+		if (!$this->table_exists($table_name))
+		{
+			return $this->umil_end('TABLE_NOT_EXIST', $table_name);
+		}
+
+		$sql = 'DELETE FROM ' . $table_name . ' WHERE ' . $this->db->sql_build_array('SELECT', $data);
+		$this->db->sql_query($sql);
+
+		return $this->umil_end();
+	}
+
+	/**
+	* Version Checker
+	*
+	* Format the file like the following:
+	* http://www.phpbb.com/updatecheck/30x.txt
+	*
+	* @param string $url The url to access (ex: www.phpbb.com)
+	* @param string $path The path to access (ex: /updatecheck)
+	* @param string $file The name of the file to access (ex: 30x.txt)
+	*
+	* @return array|string Error Message if there was any error, or an array (each line in the file as a value)
+	*/
+	function version_check($url, $path, $file, $timeout = 10, $port = 80)
+	{
+		if (!function_exists('get_remote_file'))
+		{
+			global $phpbb_root_path, $phpEx;
+
+			include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
+		}
+
+		$errstr = $errno = '';
+
+		$info = get_remote_file($url, $path, $file, $errstr, $errno, $port, $timeout);
+
+		if ($info === false)
+		{
+			return $errstr . ' [ ' . $errno . ' ]';
+		}
+
+		$info = str_replace("\r\n", "\n", $info);
+		$info = explode("\n", $info);
+
+		return $info;
+	}
+
+	/**
+	* Create table SQL
+	*
+	* Create the SQL query for the specified DBMS on the fly from a create_schema_files type of table array
+	*
+	* @param string $table_name The name of the table
+	* @param array $table_data The table data (formatted in the array format used by create_schema_files)
+	* @param string $dbms The dbms this will be built for (for testing only, leave blank to use the current DBMS)
+	*
+	* @return The sql query to run for the submitted dbms to insert the table
+	*/
+	function create_table_sql($table_name, $table_data, $dbms = '')
+	{
+		// To allow testing
+		$dbms = ($dbms) ? $dbms : $this->db_tools->sql_layer;
+
+		// A list of types being unsigned for better reference in some db's
+		$unsigned_types = array('UINT', 'UINT:', 'USINT', 'BOOL', 'TIMESTAMP');
+		$supported_dbms = array('firebird', 'mssql', 'mysql_40', 'mysql_41', 'oracle', 'postgres', 'sqlite');
+
+		$sql = '';
+
+		// Create Table statement
+		$generator = $textimage = false;
+
+		switch ($dbms)
+		{
+			case 'mysql_40':
+			case 'mysql_41':
+			case 'firebird':
+			case 'oracle':
+			case 'sqlite':
+			case 'postgres':
+				$sql .= "CREATE TABLE {$table_name} (\n";
+			break;
+
+			case 'mssql':
+				$sql .= "CREATE TABLE [{$table_name}] (\n";
+			break;
+		}
+
+		// Table specific so we don't get overlap
+		$modded_array = array();
+
+		// Write columns one by one...
+		foreach ($table_data['COLUMNS'] as $column_name => $column_data)
+		{
+			// Get type
+			if (strpos($column_data[0], ':') !== false)
+			{
+				list($orig_column_type, $column_length) = explode(':', $column_data[0]);
+				if (!is_array($this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']))
+				{
+					$column_type = sprintf($this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':'], $column_length);
+				}
+				else
+				{
+					if (isset($this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']['rule']))
+					{
+						switch ($this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']['rule'][0])
+						{
+							case 'div':
+								$column_length /= $this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']['rule'][1];
+								$column_length = ceil($column_length);
+								$column_type = sprintf($this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':'][0], $column_length);
+							break;
+						}
+					}
+
+					if (isset($this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']['limit']))
+					{
+						switch ($this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']['limit'][0])
+						{
+							case 'mult':
+								$column_length *= $this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']['limit'][1];
+								if ($column_length > $this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']['limit'][2])
+								{
+									$column_type = $this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':']['limit'][3];
+									$modded_array[$column_name] = $column_type;
+								}
+								else
+								{
+									$column_type = sprintf($this->db_tools->dbms_type_map[$dbms][$orig_column_type . ':'][0], $column_length);
+								}
+							break;
+						}
+					}
+				}
+				$orig_column_type .= ':';
+			}
+			else
+			{
+				$orig_column_type = $column_data[0];
+				$column_type = $this->db_tools->dbms_type_map[$dbms][$column_data[0]];
+				if ($column_type == 'text' || $column_type == 'blob')
+				{
+					$modded_array[$column_name] = $column_type;
+				}
+			}
+
+			// Adjust default value if db-dependant specified
+			if (is_array($column_data[1]))
+			{
+				$column_data[1] = (isset($column_data[1][$dbms])) ? $column_data[1][$dbms] : $column_data[1]['default'];
+			}
+
+			switch ($dbms)
+			{
+				case 'mysql_40':
+				case 'mysql_41':
+					$sql .= "\t{$column_name} {$column_type} ";
+
+					// For hexadecimal values do not use single quotes
+					if (!is_null($column_data[1]) && substr($column_type, -4) !== 'text' && substr($column_type, -4) !== 'blob')
+					{
+						$sql .= (strpos($column_data[1], '0x') === 0) ? "DEFAULT {$column_data[1]} " : "DEFAULT '{$column_data[1]}' ";
+					}
+					$sql .= 'NOT NULL';
+
+					if (isset($column_data[2]))
+					{
+						if ($column_data[2] == 'auto_increment')
+						{
+							$sql .= ' auto_increment';
+						}
+						else if ($dbms === 'mysql_41' && $column_data[2] == 'true_sort')
+						{
+							$sql .= ' COLLATE utf8_unicode_ci';
+						}
+					}
+
+					$sql .= ",\n";
+				break;
+
+				case 'sqlite':
+					if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
+					{
+						$sql .= "\t{$column_name} INTEGER PRIMARY KEY ";
+						$generator = $column_name;
+					}
+					else
+					{
+						$sql .= "\t{$column_name} {$column_type} ";
+					}
+
+					$sql .= 'NOT NULL ';
+					$sql .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}'" : '';
+					$sql .= ",\n";
+				break;
+
+				case 'firebird':
+					$sql .= "\t{$column_name} {$column_type} ";
+
+					if (!is_null($column_data[1]))
+					{
+						$sql .= 'DEFAULT ' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ' ';
+					}
+
+					$sql .= 'NOT NULL';
+
+					// This is a UNICODE column and thus should be given it's fair share
+					if (preg_match('/^X?STEXT_UNI|VCHAR_(CI|UNI:?)/', $column_data[0]))
+					{
+						$sql .= ' COLLATE UNICODE';
+					}
+
+					$sql .= ",\n";
+
+					if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
+					{
+						$generator = $column_name;
+					}
+				break;
+
+				case 'mssql':
+					if ($column_type == '[text]')
+					{
+						$textimage = true;
+					}
+
+					$sql .= "\t[{$column_name}] {$column_type} ";
+
+					if (!is_null($column_data[1]))
+					{
+						// For hexadecimal values do not use single quotes
+						if (strpos($column_data[1], '0x') === 0)
+						{
+							$sql .= 'DEFAULT (' . $column_data[1] . ') ';
+						}
+						else
+						{
+							$sql .= 'DEFAULT (' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ') ';
+						}
+					}
+
+					if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
+					{
+						$sql .= 'IDENTITY (1, 1) ';
+					}
+
+					$sql .= 'NOT NULL';
+					$sql .= " ,\n";
+				break;
+
+				case 'oracle':
+					$sql .= "\t{$column_name} {$column_type} ";
+					$sql .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : '';
+
+					// In Oracle empty strings ('') are treated as NULL.
+					// Therefore in oracle we allow NULL's for all DEFAULT '' entries
+					$sql .= ($column_data[1] === '') ? ",\n" : "NOT NULL,\n";
+
+					if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
+					{
+						$generator = $column_name;
+					}
+				break;
+
+				case 'postgres':
+					$sql .= "\t{$column_name} {$column_type} ";
+
+					if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
+					{
+						$sql .= "DEFAULT nextval('{$table_name}_seq'),\n";
+
+						// Make sure the sequence will be created before creating the table
+						$sql = "CREATE SEQUENCE {$table_name}_seq;\n\n" . $sql;
+					}
+					else
+					{
+						$sql .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : '';
+						$sql .= "NOT NULL";
+
+						// Unsigned? Then add a CHECK contraint
+						if (in_array($orig_column_type, $unsigned_types))
+						{
+							$sql .= " CHECK ({$column_name} >= 0)";
+						}
+
+						$sql .= ",\n";
+					}
+				break;
+			}
+		}
+
+		switch ($dbms)
+		{
+			case 'firebird':
+				// Remove last line delimiter...
+				$sql = substr($sql, 0, -2);
+				$sql .= "\n);;\n\n";
+			break;
+
+			case 'mssql':
+				$sql = substr($sql, 0, -2);
+				$sql .= "\n) ON [PRIMARY]" . (($textimage) ? ' TEXTIMAGE_ON [PRIMARY]' : '') . "\n";
+				$sql .= "GO\n\n";
+			break;
+		}
+
+		// Write primary key
+		if (isset($table_data['PRIMARY_KEY']))
+		{
+			if (!is_array($table_data['PRIMARY_KEY']))
+			{
+				$table_data['PRIMARY_KEY'] = array($table_data['PRIMARY_KEY']);
+			}
+
+			switch ($dbms)
+			{
+				case 'mysql_40':
+				case 'mysql_41':
+				case 'postgres':
+					$sql .= "\tPRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n";
+				break;
+
+				case 'firebird':
+					$sql .= "ALTER TABLE {$table_name} ADD PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . ");;\n\n";
+				break;
+
+				case 'sqlite':
+					if ($generator === false || !in_array($generator, $table_data['PRIMARY_KEY']))
+					{
+						$sql .= "\tPRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n";
+					}
+				break;
+
+				case 'mssql':
+					$sql .= "ALTER TABLE [{$table_name}] WITH NOCHECK ADD \n";
+					$sql .= "\tCONSTRAINT [PK_{$table_name}] PRIMARY KEY  CLUSTERED \n";
+					$sql .= "\t(\n";
+					$sql .= "\t\t[" . implode("],\n\t\t[", $table_data['PRIMARY_KEY']) . "]\n";
+					$sql .= "\t)  ON [PRIMARY] \n";
+					$sql .= "GO\n\n";
+				break;
+
+				case 'oracle':
+					$sql .= "\tCONSTRAINT pk_{$table_name} PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n";
+				break;
+			}
+		}
+
+		switch ($dbms)
+		{
+			case 'oracle':
+				// UNIQUE contrains to be added?
+				if (isset($table_data['KEYS']))
+				{
+					foreach ($table_data['KEYS'] as $key_name => $key_data)
+					{
+						if (!is_array($key_data[1]))
+						{
+							$key_data[1] = array($key_data[1]);
+						}
+
+						if ($key_data[0] == 'UNIQUE')
+						{
+							$sql .= "\tCONSTRAINT u_phpbb_{$key_name} UNIQUE (" . implode(', ', $key_data[1]) . "),\n";
+						}
+					}
+				}
+
+				// Remove last line delimiter...
+				$sql = substr($sql, 0, -2);
+				$sql .= "\n)\n/\n\n";
+			break;
+
+			case 'postgres':
+				// Remove last line delimiter...
+				$sql = substr($sql, 0, -2);
+				$sql .= "\n);\n\n";
+			break;
+
+			case 'sqlite':
+				// Remove last line delimiter...
+				$sql = substr($sql, 0, -2);
+				$sql .= "\n);\n\n";
+			break;
+		}
+
+		// Write Keys
+		if (isset($table_data['KEYS']))
+		{
+			foreach ($table_data['KEYS'] as $key_name => $key_data)
+			{
+				if (!is_array($key_data[1]))
+				{
+					$key_data[1] = array($key_data[1]);
+				}
+
+				switch ($dbms)
+				{
+					case 'mysql_40':
+					case 'mysql_41':
+						$sql .= ($key_data[0] == 'INDEX') ? "\tKEY" : '';
+						$sql .= ($key_data[0] == 'UNIQUE') ? "\tUNIQUE" : '';
+						foreach ($key_data[1] as $key => $col_name)
+						{
+							if (isset($modded_array[$col_name]))
+							{
+								switch ($modded_array[$col_name])
+								{
+									case 'text':
+									case 'blob':
+										$key_data[1][$key] = $col_name . '(255)';
+									break;
+								}
+							}
+						}
+						$sql .= ' ' . $key_name . ' (' . implode(', ', $key_data[1]) . "),\n";
+					break;
+
+					case 'firebird':
+						$sql .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
+						$sql .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : '';
+
+						$sql .= ' ' . $table_name . '_' . $key_name . ' ON ' . $table_name . '(' . implode(', ', $key_data[1]) . ");;\n";
+					break;
+
+					case 'mssql':
+						$sql .= ($key_data[0] == 'INDEX') ? 'CREATE  INDEX' : '';
+						$sql .= ($key_data[0] == 'UNIQUE') ? 'CREATE  UNIQUE  INDEX' : '';
+						$sql .= " [{$key_name}] ON [{$table_name}]([" . implode('], [', $key_data[1]) . "]) ON [PRIMARY]\n";
+						$sql .= "GO\n\n";
+					break;
+
+					case 'oracle':
+						if ($key_data[0] == 'UNIQUE')
+						{
+							continue;
+						}
+
+						$sql .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
+
+						$sql .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ")\n";
+						$sql .= "/\n";
+					break;
+
+					case 'sqlite':
+						$sql .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
+						$sql .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : '';
+
+						$sql .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ");\n";
+					break;
+
+					case 'postgres':
+						$sql .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
+						$sql .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : '';
+
+						$sql .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ");\n";
+					break;
+				}
+			}
+		}
+
+		switch ($dbms)
+		{
+			case 'mysql_40':
+				// Remove last line delimiter...
+				$sql = substr($sql, 0, -2);
+				$sql .= "\n);\n\n";
+			break;
+
+			case 'mysql_41':
+				// Remove last line delimiter...
+				$sql = substr($sql, 0, -2);
+				$sql .= "\n) CHARACTER SET utf8 COLLATE utf8_bin;\n\n";
+			break;
+
+			// Create Generator
+			case 'firebird':
+				if ($generator !== false)
+				{
+					$sql .= "\nCREATE GENERATOR {$table_name}_gen;;\n";
+					$sql .= 'SET GENERATOR ' . $table_name . "_gen TO 0;;\n\n";
+
+					$sql .= 'CREATE TRIGGER t_' . $table_name . ' FOR ' . $table_name . "\n";
+					$sql .= "BEFORE INSERT\nAS\nBEGIN\n";
+					$sql .= "\tNEW.{$generator} = GEN_ID({$table_name}_gen, 1);\nEND;;\n\n";
+				}
+			break;
+
+			case 'oracle':
+				if ($generator !== false)
+				{
+					$sql .= "\nCREATE SEQUENCE {$table_name}_seq\n/\n\n";
+
+					$sql .= "CREATE OR REPLACE TRIGGER t_{$table_name}\n";
+					$sql .= "BEFORE INSERT ON {$table_name}\n";
+					$sql .= "FOR EACH ROW WHEN (\n";
+					$sql .= "\tnew.{$generator} IS NULL OR new.{$generator} = 0\n";
+					$sql .= ")\nBEGIN\n";
+					$sql .= "\tSELECT {$table_name}_seq.nextval\n";
+					$sql .= "\tINTO :new.{$generator}\n";
+					$sql .= "\tFROM dual;\nEND;\n/\n\n";
+				}
+			break;
+		}
+
+		return $sql;
+	}
+
+	/**
+	* Get the real table name
+	* By A_Jelly_Doughnut
+	*
+	* @param string $table_name The table name to get the real table name from
+	*/
+	function get_table_name(&$table_name)
+	{
+		// Use the global table prefix if a custom one is not specified
+		if ($this->table_prefix === false)
+		{
+			global $table_prefix;
+		}
+		else
+		{
+			$table_prefix = $this->table_prefix;
+		}
+
+		static $constants = NULL;
+
+		if (is_null($constants))
+		{
+			$constants = get_defined_constants();
+		}
+
+		/**
+		* only do the replace if the table prefix is not already present
+		* this is required since UMIL supports specifying a table via phpbb_foo
+		* (where a replace would be needed)
+		* or by FOO_TABLE (where a replace is already done at constant-define time)
+		*/
+		if (!preg_match('#^' . preg_quote($table_prefix, '#') . '#', $table_name) || !in_array($table_name, $constants, true))
+		{
+			$table_name = preg_replace('#^phpbb_#i', $table_prefix, $table_name);
+		}
+	}
+}
+
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/umil_auto.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,248 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil_auto.php 176 2009-09-19 03:15:41Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ *
+ */
+
+/**
+ * Parameters which should be setup before calling this file:
+ * @param string $mod_name The name of the mod to be displayed during installation.
+ * @param string $language_file The language file which will be included when installing (should contain the $mod_name)
+ * @param string $version_config_name The name of the config variable which will hold the currently installed version
+ * @param array $versions The array of versions and actions within each.
+ */
+
+/**
+ * Language entries that should exist in the $language_file that will be included:
+ * $mod_name
+ * 'INSTALL_' . $mod_name
+ * 'INSTALL_' . $mod_name . '_CONFIRM'
+ * 'UPDATE_' . $mod_name
+ * 'UPDATE_' . $mod_name . '_CONFIRM'
+ * 'UNINSTALL_' . $mod_name
+ * 'UNINSTALL_' . $mod_name . '_CONFIRM'
+ */
+
+// You must run define('UMIL_AUTO', true) before calling this file.
+/**
+ * @ignore
+ */
+if (!defined('UMIL_AUTO'))
+{
+	exit;
+}
+
+/*
+* If IN_PHPBB is already defined, lets assume they already included the common.php file and are done with setup
+*
+* NOTE: If you do not setup the common.php file YOU WILL NOT BE ABLE TO USE ANY CONSTANTS!
+*/
+if (!defined('IN_PHPBB'))
+{
+	define('IN_PHPBB', true);
+	include($phpbb_root_path . 'common.' . $phpEx);
+	$user->session_begin();
+	$auth->acl($user->data);
+	$user->setup();
+}
+
+// Add the language file if one was specified
+if (isset($language_file))
+{
+	$user->add_lang($language_file);
+}
+if (!isset($user->lang[$mod_name]))
+{
+	// Prevent errors if the language key doesn't exist.
+	$user->lang[$mod_name] = $mod_name;
+}
+
+// Use the Mod's logo if one was specified
+if (isset($logo_img))
+{
+	$template->assign_var('LOGO_IMG', $phpbb_root_path . $logo_img);
+}
+
+// Display a login box if they are not logged in
+if (!$user->data['is_registered'])
+{
+	login_box();
+}
+
+if (!class_exists('umil_frontend'))
+{
+    if (!file_exists($phpbb_root_path . 'umil/umil_frontend.' . $phpEx))
+	{
+		trigger_error('Please download the latest UMIL (Unified MOD Install Library) from: <a href="http://www.phpbb.com/mods/umil/">phpBB.com/mods/umil</a>', E_USER_ERROR);
+	}
+
+	include($phpbb_root_path . 'umil/umil_frontend.' . $phpEx);
+}
+
+$force_display_results = request_var('display_results', (defined('DEBUG') ? true : false));
+$umil = new umil_frontend($mod_name, true, $force_display_results);
+
+// Check after initiating UMIL.
+if ($user->data['user_type'] != USER_FOUNDER)
+{
+	trigger_error('FOUNDERS_ONLY');
+}
+
+// We will sort the actions to prevent issues from mod authors incorrectly listing the version numbers
+uksort($versions, 'version_compare');
+
+// Find the current version to install
+$current_version = '0.0.0';
+foreach ($versions as $version => $actions)
+{
+	$current_version = $version;
+}
+
+$template->assign_var('L_TITLE_EXPLAIN', ((isset($user->lang[$mod_name . '_EXPLAIN'])) ? $user->lang[$mod_name . '_EXPLAIN'] . '<br /><br />' : '') . sprintf($user->lang['VERSIONS'], $current_version, ((isset($config[$version_config_name])) ? $config[$version_config_name] : $user->lang['NONE'])));
+
+$submit = (isset($_POST['submit'])) ? true : false;
+$action = request_var('action', '');
+$version_select = request_var('version_select', '');
+
+$current_page = (strpos($user->page['page'], '?') !== false) ? substr($user->page['page'], 0, strpos($user->page['page'], '?')) : $user->page['page'];
+
+$stages = array(
+	'CONFIGURE'	=> array('url' => append_sid($phpbb_root_path . $current_page)),
+	'CONFIRM',
+	'ACTION',
+);
+
+if (!isset($options) || !is_array($options))
+{
+	$options = array();
+}
+
+$options = array(
+	'legend1'			=> 'OPTIONS',
+	'action'			=> array('lang' => 'ACTION', 'type' => 'custom', 'function' => 'umil_install_update_uninstall_select', 'explain' => false),
+	'version_select'	=> array('lang' => 'VERSION_SELECT', 'type' => 'custom', 'function' => 'umil_version_select', 'explain' => true),
+	'display_results'	=> array('lang' => 'DISPLAY_RESULTS', 'type' => 'radio:yes_no', 'explain' => true, 'default' => $force_display_results),
+) + $options;
+
+if (!$submit && !$umil->confirm_box(true))
+{
+	$umil->display_stages($stages);
+
+	$umil->display_options($options);
+	$umil->done();
+}
+else if (!$umil->confirm_box(true))
+{
+	$umil->display_stages($stages, 2);
+
+	$hidden = array();
+	foreach ($options as $key => $data)
+	{
+		$hidden[$key] = request_var($key, '', true);
+	}
+
+	switch ($action)
+	{
+		case 'install' :
+			if (!isset($user->lang['INSTALL_' . $mod_name]))
+			{
+				$user->lang['INSTALL_' . $mod_name] = sprintf($user->lang['INSTALL_MOD'], $user->lang[$mod_name]);
+				$user->lang['INSTALL_' . $mod_name . '_CONFIRM'] = sprintf($user->lang['INSTALL_MOD_CONFIRM'], $user->lang[$mod_name]);
+			}
+			$umil->confirm_box(false, 'INSTALL_' . $mod_name, $hidden);
+		break;
+
+		case 'update' :
+			if (!isset($user->lang['UPDATE_' . $mod_name]))
+			{
+				$user->lang['UPDATE_' . $mod_name] = sprintf($user->lang['UPDATE_MOD'], $user->lang[$mod_name]);
+				$user->lang['UPDATE_' . $mod_name . '_CONFIRM'] = sprintf($user->lang['UPDATE_MOD_CONFIRM'], $user->lang[$mod_name]);
+			}
+			$umil->confirm_box(false, 'UPDATE_' . $mod_name, $hidden);
+		break;
+
+		case 'uninstall' :
+			if (!isset($user->lang['UNINSTALL_' . $mod_name]))
+			{
+				$user->lang['UNINSTALL_' . $mod_name] = sprintf($user->lang['UNINSTALL_MOD'], $user->lang[$mod_name]);
+				$user->lang['UNINSTALL_' . $mod_name . '_CONFIRM'] = sprintf($user->lang['UNINSTALL_MOD_CONFIRM'], $user->lang[$mod_name]);
+			}
+			$umil->confirm_box(false, 'UNINSTALL_' . $mod_name, $hidden);
+		break;
+	}
+}
+else if ($umil->confirm_box(true))
+{
+	$umil->display_stages($stages, 3);
+
+	$umil->run_actions($action, $versions, $version_config_name, $version_select);
+	$umil->done();
+}
+
+// Shouldn't get here.
+redirect($phpbb_root_path . $current_page);
+
+function umil_install_update_uninstall_select($value, $key)
+{
+	global $config, $current_version, $user, $version_config_name;
+
+	$db_version = (isset($config[$version_config_name])) ? $config[$version_config_name] : false;
+
+	if ($db_version === false)
+	{
+		return '<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="install" checked="checked" /> ' . $user->lang['INSTALL'] . '&nbsp;&nbsp;
+		<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="update" disabled="disabled" /> ' . $user->lang['UPDATE'] . '&nbsp;&nbsp;
+		<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="uninstall" disabled="disabled" /> ' . $user->lang['UNINSTALL'];
+	}
+	else if ($current_version == $db_version)
+	{
+		return '<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="install" disabled="disabled" /> ' . $user->lang['INSTALL'] . '&nbsp;&nbsp;
+		<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="update" disabled="disabled" /> ' . $user->lang['UPDATE'] . '&nbsp;&nbsp;
+		<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="uninstall" checked="checked" /> ' . $user->lang['UNINSTALL'];
+	}
+	else if (version_compare($current_version, $db_version, '>'))
+	{
+		return '<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="install" disabled="disabled" /> ' . $user->lang['INSTALL'] . '&nbsp;&nbsp;
+		<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="update" checked="checked" /> ' . $user->lang['UPDATE'] . '&nbsp;&nbsp;
+		<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="uninstall" /> ' . $user->lang['UNINSTALL'];
+	}
+	else
+	{
+		// Shouldn't ever get here...but just in case.
+		return '<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="install" /> ' . $user->lang['INSTALL'] . '&nbsp;&nbsp;
+		<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="update" /> ' . $user->lang['UPDATE'] . '&nbsp;&nbsp;
+		<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="uninstall" /> ' . $user->lang['UNINSTALL'];
+	}
+}
+
+function umil_version_select($value, $key)
+{
+	global $user, $versions;
+
+	$output = '<input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="" checked="checked" /> ' . $user->lang['IGNORE'] . ' &nbsp; ';
+	$output .='<a href="#" onclick="if (document.getElementById(\'version_select_advanced\').style.display == \'none\') {document.getElementById(\'version_select_advanced\').style.display=\'block\'} else {document.getElementById(\'version_select_advanced\').style.display=\'none\'}">' . $user->lang['ADVANCED'] . '</a><br /><br />';
+
+	$cnt = 0;
+	$output .= '<table id="version_select_advanced" style="display: none;" cellspacing="0" cellpadding="0"><tr>';
+	foreach ($versions as $version => $actions)
+	{
+		$cnt++;
+
+		$output .= '<td><input id="' . $key . '" class="radio" type="radio" name="' . $key . '" value="' . $version . '" /> ' . $version . '</td>';
+
+		if ($cnt % 4 == 0)
+		{
+			$output .= '</tr><tr>';
+		}
+	}
+	$output .= '</tr></table>';
+
+	return $output;
+}
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/root/umil/umil_frontend.php	Sat Dec 04 20:11:27 2010 +0000
@@ -0,0 +1,619 @@
+<?php
+/**
+ *
+ * @author Nathan Guse (EXreaction) http://lithiumstudios.org
+ * @author David Lewis (Highway of Life) highwayoflife@gmail.com
+ * @package umil
+ * @version $Id: umil_frontend.php 221 2010-05-24 23:32:45Z exreaction $
+ * @copyright (c) 2008 phpBB Group
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ */
+
+/**
+ * @ignore
+ */
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+if (!class_exists('umil'))
+{
+    if (!file_exists($phpbb_root_path . 'umil/umil.' . $phpEx))
+	{
+		trigger_error('Please download the latest UMIL (Unified MOD Install Library) from: <a href="http://www.phpbb.com/mods/umil/">phpBB.com/mods/umil</a>', E_USER_ERROR);
+	}
+
+	include($phpbb_root_path . 'umil/umil.' . $phpEx);
+}
+
+/**
+ * UMIL - Unified MOD Installation File class Front End
+ */
+class umil_frontend extends umil
+{
+	// The title of the mod
+	var $title = '';
+
+	// Were there any errors so far (used when displaying results)?
+	var $errors = false;
+
+	// Was anything done at all (used when displaying results)?
+	var $results = false;
+
+	// The file we will record any errors in
+	var $error_file = '';
+
+	// Force displaying of the results?
+	var $force_display_results = false;
+
+	/**
+	* Constructor
+	*
+	* @param string $title The title to display
+	* @param bool $auto_display_results Automatically display results or not?
+	* @param bool $force_display_results Allows you to force this to automatically display all results
+	* @param object|bool $db Allows you to use your own $db object instead of the global $db
+	*/
+	function umil_frontend($title = '', $auto_display_results = false, $force_display_results = false, $db = false)
+	{
+		global $phpbb_root_path, $phpEx, $template, $user;
+
+		$this->title = $title;
+
+		// we must call the main constructor
+		$this->umil(false, $db);
+		$this->auto_display_results = $auto_display_results;
+		$this->force_display_results = $force_display_results;
+
+		$user->add_lang('install');
+
+		// Setup the template
+		$template->set_custom_template($phpbb_root_path . 'umil/style', 'umil');
+
+		// The UMIL template is never stored in the database
+		$user->theme['template_storedb'] = false;
+
+		$template->set_filenames(array(
+			'body' => 'index_body.html',
+		));
+
+		$title_explain = (isset($user->lang[$title . '_EXPLAIN'])) ? $user->lang[$title . '_EXPLAIN'] : '';
+		$title = (isset($user->lang[$title])) ? $user->lang[$title] : $title;
+
+		page_header($title, false);
+
+		$template->assign_vars(array(
+			'SQL_LAYER'			=> $this->db->sql_layer,
+			'UMIL_ROOT_PATH'	=> $phpbb_root_path . 'umil/',
+
+			'U_ADM_INDEX'		=> append_sid("{$phpbb_root_path}adm/index.$phpEx", false, true, $user->session_id),
+			'U_INDEX'			=> append_sid("{$phpbb_root_path}index.$phpEx"),
+
+			'PAGE_TITLE'		=> $title,
+			'L_TITLE'			=> $title,
+			'L_TITLE_EXPLAIN'	=> $title_explain,
+		));
+	}
+
+	/**
+	* Display Stages
+	*
+	* Outputs the stage list
+	*
+	* @param array $stages The list of stages.
+	*	Either send the array like: array('CONFIGURE', 'INSTALL') or you can send it like array('CONFIGURE' => array('url' => $url), 'INSTALL' => array('url' => $url)) or you can use a mixture of the two.
+	* @param int $selected The current stage
+	*/
+	function display_stages($stages, $selected = 1)
+	{
+		global $template, $user;
+
+		$i = 1;
+		foreach ($stages as $stage => $data)
+		{
+			if (!is_array($data))
+			{
+				$stage = $data;
+				$data = array();
+			}
+
+			$template->assign_block_vars('l_block', array(
+				'L_TITLE'			=> (isset($user->lang[$stage])) ? $user->lang[$stage] : $stage,
+				'U_TITLE'			=> (isset($data['url'])) ? $data['url'] : false,
+				'S_COMPLETE'		=> ($i < $selected) ? true : false,
+				'S_SELECTED'		=> ($i == $selected) ? true : false,
+			));
+
+			$i++;
+		}
+	}
+
+	/**
+	* Confirm Box
+	*
+	* Displays an inline confirm box (makes it possible to have a nicer looking confirm box shown if you want to use stages)
+	*
+	* @param boolean $check True for checking if confirmed (without any additional parameters) and false for displaying the confirm box
+	* @param string $title Title/Message used for confirm box.
+	*		message text is _CONFIRM appended to title.
+	*		If title cannot be found in user->lang a default one is displayed
+	*		If title_CONFIRM cannot be found in user->lang the text given is used.
+	* @param string $hidden Hidden variables
+	*/
+	function confirm_box($check, $title = '', $hidden = '', $html_body = 'index_body.html')
+	{
+		if (!$check)
+		{
+			global $template;
+			$template->assign_var('S_CONFIRM', true);
+		}
+
+		if (is_array($hidden))
+		{
+			$hidden = build_hidden_fields($hidden);
+		}
+
+		return confirm_box($check, $title, $hidden, $html_body);
+	}
+
+	/**
+	* Display Options
+	*
+	* Display a set of options from an inputted array.
+	*
+	* @param array $options This is the array of options.  Format it like you would if you were using the setup in acp_board except only enter what would go in the 'vars' array.
+	*/
+	function display_options($options)
+	{
+		global $phpbb_root_path, $phpEx, $template, $user;
+
+		foreach ($options as $name => $vars)
+		{
+			if (!is_array($vars) && strpos($name, 'legend') === false)
+			{
+				continue;
+			}
+
+			if (strpos($name, 'legend') !== false)
+			{
+				$template->assign_block_vars('options', array(
+					'S_LEGEND'		=> true,
+					'LEGEND'		=> (isset($user->lang[$vars])) ? $user->lang[$vars] : $vars)
+				);
+
+				continue;
+			}
+
+			$type = explode(':', $vars['type']);
+
+			$l_explain = '';
+			if (isset($vars['explain']) && $vars['explain'] && isset($vars['lang_explain']))
+			{
+				$l_explain = (isset($user->lang[$vars['lang_explain']])) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain'];
+			}
+			else if (isset($vars['explain']) && $vars['explain'])
+			{
+				$l_explain = (isset($user->lang[$vars['lang'] . '_EXPLAIN'])) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : '';
+			}
+
+			$content = $this->build_cfg_template($type, $name, $vars);
+
+			if (!sizeof($content))
+			{
+				continue;
+			}
+
+			$template->assign_block_vars('options', array(
+				'KEY'			=> $name,
+				'TITLE'			=> (isset($user->lang[$vars['lang']])) ? $user->lang[$vars['lang']] : $vars['lang'],
+				'S_EXPLAIN'		=> (isset($vars['explain'])) ? $vars['explain'] : false,
+				'TITLE_EXPLAIN'	=> $l_explain,
+				'CONTENT'		=> $content['tpl'],
+
+				// Find user link
+				'S_FIND_USER'	=> (isset($content['find_user'])) ? true : false,
+				'U_FIND_USER'	=> (isset($content['find_user'])) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", array('mode' => 'searchuser', 'form' => 'select_user', 'field' => 'username', 'select_single' => 'true', 'form' => 'umil', 'field' => $content['find_user_field'])) : '',
+			));
+		}
+	}
+
+	/**
+	* Display results
+	*
+	* Display the results from the previous command, or you may enter your own command/result if you would like.
+	*
+	* @param string $command The command you would like shown (leave blank to use the last command saved in $this->command)
+	* @param string $result The result you would like shown (leave blank to use the last result saved in $this->result)
+	*/
+	function display_results($command = '', $result = '')
+	{
+		global $config, $template, $user, $phpbb_root_path;
+
+		$command = ($command) ? $command : $this->command;
+		$command = (isset($user->lang[$command])) ? $user->lang[$command] : $command;
+		$result = ($result) ? $result : $this->result;
+		$result = (isset($user->lang[$result])) ? $user->lang[$result] : $result;
+
+		$this->results = true;
+
+		if ($result != $user->lang['SUCCESS'])
+		{
+			// Check if the umil/error_files/ is writable
+			if (!is_writable("{$phpbb_root_path}umil/error_files/"))
+			{
+				phpbb_chmod("{$phpbb_root_path}umil/error_files/", CHMOD_ALL);
+			}
+
+			// Hopefully it is writable now.  If not there is nothing we can do.
+			if (is_writable("{$phpbb_root_path}umil/error_files/"))
+			{
+				if ($this->errors == false)
+				{
+					$this->errors = true;
+
+					// Setting up an error recording file
+					$append = 0;
+					$this->error_file = "{$phpbb_root_path}umil/error_files/" . strtolower($this->title) . '.txt';
+					while (file_exists($this->error_file))
+					{
+						$this->error_file = "{$phpbb_root_path}umil/error_files/" . strtolower($this->title) . $append . '.txt';
+						$append++;
+					}
+				}
+
+				if (file_exists($this->error_file) && filesize($this->error_file))
+				{
+					$fp = fopen($this->error_file, 'rb');
+					$contents = fread($fp, filesize($this->error_file));
+					fclose($fp);
+					phpbb_chmod($this->error_file, CHMOD_ALL);
+				}
+				else
+				{
+					$contents = ((isset($user->lang[$this->title])) ? $user->lang[$this->title] : $this->title) . "\n";
+					$contents .= 'PHP Version: ' . phpversion() . "\n";
+					$contents .= 'DBMS: ' . $this->db->sql_server_info() . "\n";
+					$contents .= 'phpBB3 Version: ' . $config['version'] . "\n\n";
+				}
+
+				$contents .= "{$command}\n{$result}\n\n";
+
+				$fp = fopen($this->error_file, 'wb');
+				fwrite($fp, $contents);
+				fclose($fp);
+				phpbb_chmod($this->error_file, CHMOD_ALL);
+			}
+			else
+			{
+				$this->errors = true;
+			}
+		}
+
+		if ($result != $user->lang['SUCCESS'] || $this->force_display_results == true)// || defined('DEBUG'))
+		{
+			$template->assign_block_vars('results', array(
+				'COMMAND'	=> $command,
+				'RESULT'	=> $result,
+				'S_SUCCESS'	=> ($result == $user->lang['SUCCESS']) ? true : false,
+			));
+		}
+	}
+
+	/**
+	* Done
+	*
+	* This should be called when everything is done for this page.
+	*/
+	function done()
+	{
+		global $phpbb_root_path, $phpEx, $template, $user;
+
+		$download_file = ($this->error_file) ? append_sid("{$phpbb_root_path}umil/file.$phpEx", 'file=' . basename($this->error_file, '.txt')) : '';
+		$filename = ($this->error_file) ? 'umil/error_files/' . basename($this->error_file) : '';
+
+		$template->assign_vars(array(
+			'U_ERROR_FILE'		=> $this->error_file,
+
+			'L_RESULTS'			=> ($this->errors) ? $user->lang['FAIL'] : $user->lang['SUCCESS'],
+			'L_ERROR_NOTICE'	=> ($this->errors) ? (($this->error_file) ? sprintf($user->lang['ERROR_NOTICE'], $download_file, $filename) : $user->lang['ERROR_NOTICE_NO_FILE']) : '',
+
+			'S_RESULTS'			=> $this->results,
+			'S_SUCCESS'			=> ($this->errors) ? false : true,
+			'S_PERMISSIONS'		=> $this->permissions_added,
+		));
+
+		page_footer();
+	}
+
+	/**
+	* Build configuration template for acp configuration pages
+	*
+	* Slightly modified from adm/index.php
+	*/
+	function build_cfg_template($tpl_type, $name, $vars)
+	{
+		global $user;
+
+		$tpl = array();
+
+		$default = (isset($vars['default'])) ? request_var($name, $vars['default']) : request_var($name, '');
+
+		switch ($tpl_type[0])
+		{
+			case 'text':
+				// If requested set some vars so that we later can display the link correct
+				if (isset($vars['select_user']) && $vars['select_user'] === true)
+				{
+					$tpl['find_user']		= true;
+					$tpl['find_user_field']	= $name;
+				}
+			case 'password':
+				$size = (int) $tpl_type[1];
+				$maxlength = (int) $tpl_type[2];
+
+				$tpl['tpl'] = '<input id="' . $name . '" type="' . $tpl_type[0] . '"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="' . $name . '" value="' . $default . '" />';
+			break;
+
+			case 'textarea':
+				$rows = (int) $tpl_type[1];
+				$cols = (int) $tpl_type[2];
+
+				$tpl['tpl'] = '<textarea id="' . $name . '" name="' . $name . '" rows="' . $rows . '" cols="' . $cols . '">' . $default . '</textarea>';
+			break;
+
+			case 'radio':
+				$name_yes	= ($default) ? ' checked="checked"' : '';
+				$name_no	= (!$default) ? ' checked="checked"' : '';
+
+				$tpl_type_cond = explode('_', $tpl_type[1]);
+				$type_no = ($tpl_type_cond[0] == 'disabled' || $tpl_type_cond[0] == 'enabled') ? false : true;
+
+				$tpl_no = '<label><input type="radio" name="' . $name . '" value="0"' . $name_no . ' class="radio" /> ' . (($type_no) ? $user->lang['NO'] : $user->lang['DISABLED']) . '</label>';
+				$tpl_yes = '<label><input type="radio" id="' . $name . '" name="' . $name . '" value="1"' . $name_yes . ' class="radio" /> ' . (($type_no) ? $user->lang['YES'] : $user->lang['ENABLED']) . '</label>';
+
+				$tpl['tpl'] = ($tpl_type_cond[0] == 'yes' || $tpl_type_cond[0] == 'enabled') ? $tpl_yes . $tpl_no : $tpl_no . $tpl_yes;
+			break;
+
+			case 'checkbox':
+				$checked	= ($default) ? ' checked="checked"' : '';
+
+				$tpl['tpl'] = '<input type="checkbox" id="' . $name . '" name="' . $name . '"' . $checked . ' />';
+			break;
+
+			case 'select':
+			case 'select_multiple':
+			case 'custom':
+
+				$return = '';
+
+				if (isset($vars['function']))
+				{
+					$call = $vars['function'];
+				}
+				else
+				{
+					break;
+				}
+
+				if (isset($vars['params']))
+				{
+					$args = array();
+					foreach ($vars['params'] as $value)
+					{
+						switch ($value)
+						{
+							case '{CONFIG_VALUE}':
+								$value = $default;
+							break;
+
+							case '{KEY}':
+								$value = $name;
+							break;
+						}
+
+						$args[] = $value;
+					}
+				}
+				else
+				{
+					if ($tpl_type[0] == 'select_multiple')
+					{
+						$new[$config_key] = @unserialize(trim($new[$config_key]));
+					}
+
+					$args = array($default, $name);
+				}
+
+				$return = call_user_func_array($call, $args);
+
+
+				if ($tpl_type[0] == 'select_multiple')
+				{
+					$tpl = '<select id="' . $key . '" name="' . $name . '[]" multiple="multiple">' . $return . '</select>';
+				}
+				else if ($tpl_type[0] == 'select')
+				{
+					$multiple	= ((isset($vars['multiple']) && $vars['multiple']) ? ' multiple="multiple"' : '');
+					$tpl['tpl']		= '<select id="' . $name . '" name="' . $name . (!empty($multiple) ? '[]' : '') . '"' . $multiple . '>' . $return . '</select>';
+				}
+				else
+				{
+					$tpl['tpl'] = $return;
+				}
+
+			break;
+
+			default:
+			break;
+		}
+
+		if (isset($vars['append']))
+		{
+			$tpl['tpl'] .= $vars['append'];
+		}
+
+		return $tpl;
+	}
+}
+
+// Compatibility
+if (!function_exists('phpbb_chmod'))
+{
+	// They shouldn't be defined...but just in case...
+	if (!defined('CHMOD_ALL'))
+	{
+		@define('CHMOD_ALL', 7);
+		@define('CHMOD_READ', 4);
+		@define('CHMOD_WRITE', 2);
+		@define('CHMOD_EXECUTE', 1);
+	}
+
+	/**
+	* Global function for chmodding directories and files for internal use
+	* This function determines owner and group whom the file belongs to and user and group of PHP and then set safest possible file permissions.
+	* The function determines owner and group from common.php file and sets the same to the provided file. Permissions are mapped to the group, user always has rw(x) permission.
+	* The function uses bit fields to build the permissions.
+	* The function sets the appropiate execute bit on directories.
+	*
+	* Supported constants representing bit fields are:
+	*
+	* CHMOD_ALL - all permissions (7)
+	* CHMOD_READ - read permission (4)
+	* CHMOD_WRITE - write permission (2)
+	* CHMOD_EXECUTE - execute permission (1)
+	*
+	* NOTE: The function uses POSIX extension and fileowner()/filegroup() functions. If any of them is disabled, this function tries to build proper permissions, by calling is_readable() and is_writable() functions.
+	*
+	* @param $filename The file/directory to be chmodded
+	* @param $perms Permissions to set
+	* @return true on success, otherwise false
+	*
+	* @author faw, phpBB Group
+	*/
+	function phpbb_chmod($filename, $perms = CHMOD_READ)
+	{
+		// Return if the file no longer exists.
+		if (!file_exists($filename))
+		{
+			return false;
+		}
+
+		if (!function_exists('fileowner') || !function_exists('filegroup'))
+		{
+			$file_uid = $file_gid = false;
+			$common_php_owner = $common_php_group = false;
+		}
+		else
+		{
+			global $phpbb_root_path, $phpEx;
+
+			// Determine owner/group of common.php file and the filename we want to change here
+			$common_php_owner = fileowner($phpbb_root_path . 'common.' . $phpEx);
+			$common_php_group = filegroup($phpbb_root_path . 'common.' . $phpEx);
+
+			$file_uid = fileowner($filename);
+			$file_gid = filegroup($filename);
+
+			// Try to set the owner to the same common.php has
+			if ($common_php_owner !== $file_uid && $common_php_owner !== false && $file_uid !== false)
+			{
+				// Will most likely not work
+				if (@chown($filename, $common_php_owner));
+				{
+					clearstatcache();
+					$file_uid = fileowner($filename);
+				}
+			}
+
+			// Try to set the group to the same common.php has
+			if ($common_php_group !== $file_gid && $common_php_group !== false && $file_gid !== false)
+			{
+				if (@chgrp($filename, $common_php_group));
+				{
+					clearstatcache();
+					$file_gid = filegroup($filename);
+				}
+			}
+		}
+
+		// And the owner and the groups PHP is running under.
+		$php_uid = (function_exists('posix_getuid')) ? @posix_getuid() : false;
+		$php_gids = (function_exists('posix_getgroups')) ? @posix_getgroups() : false;
+
+		// Who is PHP?
+		if ($file_uid === false || $file_gid === false || $php_uid === false || $php_gids === false)
+		{
+			$php = NULL;
+		}
+		else if ($file_uid == $php_uid /* && $common_php_owner !== false && $common_php_owner === $file_uid*/)
+		{
+			$php = 'owner';
+		}
+		else if (in_array($file_gid, $php_gids))
+		{
+			$php = 'group';
+		}
+		else
+		{
+			$php = 'other';
+		}
+
+		// Owner always has read/write permission
+		$owner = CHMOD_READ | CHMOD_WRITE;
+		if (is_dir($filename))
+		{
+			$owner |= CHMOD_EXECUTE;
+
+			// Only add execute bit to the permission if the dir needs to be readable
+			if ($perms & CHMOD_READ)
+			{
+				$perms |= CHMOD_EXECUTE;
+			}
+		}
+
+		switch ($php)
+		{
+			case null:
+			case 'owner':
+				/* ATTENTION: if php is owner or NULL we set it to group here. This is the most failsafe combination for the vast majority of server setups.
+
+				$result = @chmod($filename, ($owner << 6) + (0 << 3) + (0 << 0));
+
+				clearstatcache();
+
+				if (!is_null($php) || (is_readable($filename) && is_writable($filename)))
+				{
+					break;
+				}
+			*/
+
+			case 'group':
+				$result = @chmod($filename, ($owner << 6) + ($perms << 3) + (0 << 0));
+
+				clearstatcache();
+
+				if (!is_null($php) || ((!($perms & CHMOD_READ) || is_readable($filename)) && (!($perms & CHMOD_WRITE) || is_writable($filename))))
+				{
+					break;
+				}
+
+			case 'other':
+				$result = @chmod($filename, ($owner << 6) + ($perms << 3) + ($perms << 0));
+
+				clearstatcache();
+
+				if (!is_null($php) || ((!($perms & CHMOD_READ) || is_readable($filename)) && (!($perms & CHMOD_WRITE) || is_writable($filename))))
+				{
+					break;
+				}
+
+			default:
+				return false;
+			break;
+		}
+
+		return $result;
+	}
+}
+?>
\ No newline at end of file
--- a/subsilver2.xml	Mon Aug 02 19:30:31 2010 +0000
+++ b/subsilver2.xml	Sat Dec 04 20:11:27 2010 +0000
@@ -45,7 +45,7 @@
 		<installation>
 			<level>intermediate</level>
 			<time>180</time>
-			<target-version>3.0.7</target-version>
+			<target-version>3.0.8</target-version>
 		</installation>
 		<history>
 			<entry>