Index: releases/1.2.1-RC1/install/english.lang
===================================================================
--- releases/1.2.1-RC1/install/english.lang	(nonexistent)
+++ releases/1.2.1-RC1/install/english.lang	(revision 15887)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LANGUAGES Version="6">
+	<LANGUAGE Encoding="base64" PackName="English" LocalName="English" DateFormat="m/d/Y" ShortDateFormat="m/d" TimeFormat="g:i A" ShortTimeFormat="g:i A" InputDateFormat="m/d/Y" InputTimeFormat="g:i:s A" DecimalPoint="." ThousandSep="," UnitSystem="2" Locale="en-US" UserDocsUrl="http://docs.in-portal.org/eng/index.php">
+		<EMAILDESIGNS>
+			<HTML>JGJvZHkNCjxici8+PGJyLz4NCg0KU2luY2VyZWx5LDxici8+PGJyLz4NCg0KV2Vic2l0ZSBhZG1pbmlzdHJhdGlvbi4NCg0KPCEtLSMjIDxpbnAyOmVtYWlsLWxvZ19JdGVtTGluayB0ZW1wbGF0ZT0icGxhdGZvcm0vbXlfYWNjb3VudC9lbWFpbCIvPiAjIy0tPg==</HTML>
+		</EMAILDESIGNS>
+		<PHRASES>
+			<PHRASE Label="la_fld_DataFile" Module="Custom" Type="1">RGF0YSBmaWxl</PHRASE>
+			<PHRASE Label="la_fld_Good" Module="Custom" Type="1" Column="R29vZA==">R29vZA==</PHRASE>
+			<PHRASE Label="la_opt_Custom" Module="Custom" Type="1">Q3VzdG9t</PHRASE>
+			<PHRASE Label="la_opt_Default" Module="Custom" Type="1">RGVmYXVsdA==</PHRASE>
+			<PHRASE Label="la_tab_Widgets" Module="Custom" Type="1">V2lkZ2V0cw==</PHRASE>
+			<PHRASE Label="la_title_AddingWidget" Module="Custom" Type="1">QWRkaW5nIFdpZGdldA==</PHRASE>
+			<PHRASE Label="la_title_EditingWidget" Module="Custom" Type="1">RWRpdGluZyBXaWRnZXQ=</PHRASE>
+			<PHRASE Label="la_title_In-Custom" Module="Custom" Type="1">Q3VzdG9t</PHRASE>
+			<PHRASE Label="la_title_NewWidget" Module="Custom" Type="1">TmV3IFdpZGdldA==</PHRASE>
+			<PHRASE Label="la_title_Widgets" Module="Custom" Type="1">V2lkZ2V0cw==</PHRASE>
+			<PHRASE Label="la_ToolTip_NewWidget" Module="Custom" Type="1">TmV3IFdpZGdldA==</PHRASE>
+		</PHRASES>
+	</LANGUAGE>
+</LANGUAGES>
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/install/english.lang
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.1.1.2.2
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/upgrades.php
===================================================================
--- releases/1.2.1-RC1/install/upgrades.php	(nonexistent)
+++ releases/1.2.1-RC1/install/upgrades.php	(revision 15887)
@@ -0,0 +1,64 @@
+<?php
+/**
+* @version	$Id$
+* @package	Custom
+* @copyright	Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
+* @license      GNU/GPL
+* In-Portal is Open Source software.
+* This means that this software may have been modified pursuant
+* the GNU General Public License, and as distributed it includes
+* or is derivative of works licensed under the GNU General Public License
+* or other free or open source software licenses.
+* See http://www.in-portal.org/license for copyright notices and details.
+*/
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	$upgrade_class = 'CustomUpgrades';
+
+	/**
+	 * Class, that holds all upgrade scripts for "Custom" module
+	 *
+	 */
+	class CustomUpgrades extends kUpgradeHelper {
+
+		public function __construct()
+		{
+			parent::__construct();
+
+			$this->dependencies = Array (
+				'1.0.0' => Array ('Core' => '5.0.0'),
+				'1.0.1' => Array ('Core' => '5.0.1'),
+				'1.0.2-B1' => Array ('Core' => '5.0.2-B1'),
+				'1.0.2-B2' => Array ('Core' => '5.0.2-B2'),
+				'1.0.2-RC1' => Array ('Core' => '5.0.2-RC1'),
+				'1.0.2' => Array ('Core' => '5.0.2'),
+				'1.0.3-B1' => Array ('Core' => '5.0.3-B1'),
+				'1.0.3-RC1' => Array ('Core' => '5.0.3-RC1'),
+				'1.0.3' => Array ('Core' => '5.0.3'),
+				'1.0.4-B1' => Array ('Core' => '5.0.4-B1'),
+				'1.0.4' => Array ('Core' => '5.0.4'),
+				'1.1.0-B1' => Array ('Core' => '5.1.0-B1'),
+				'1.1.0-B2' => Array ('Core' => '5.1.0-B2'),
+				'1.1.0-RC1' => Array ('Core' => '5.1.0-RC1'),
+				'1.1.0' => Array ('Core' => '5.1.0'),
+				'1.1.1-B1' => Array ('Core' => '5.1.1-B1'),
+				'1.1.1-RC1' => Array ('Core' => '5.1.1-RC1'),
+				'1.1.1' => Array ('Core' => '5.1.1'),
+				'1.1.2-B1' => Array ('Core' => '5.1.2-B1'),
+				'1.1.2-RC1' => Array ('Core' => '5.1.2-RC1'),
+				'1.1.2' => Array ('Core' => '5.1.2'),
+				'1.1.3-B1' => Array ('Core' => '5.1.3-B1'),
+				'1.1.3-B2' => Array ('Core' => '5.1.3-B2'),
+				'1.1.3' => Array ('Core' => '5.1.3'),
+				'1.2.0-B1' => Array ('Core' => '5.2.0-B1'),
+				'1.2.0-B2' => Array ('Core' => '5.2.0-B2'),
+				'1.2.0-B3' => Array ('Core' => '5.2.0-B3'),
+				'1.2.0-RC1' => Array ('Core' => '5.2.0-RC1'),
+				'1.2.0' => Array ('Core' => '5.2.0'),
+				'1.2.1-B1' => Array ('Core' => '5.2.1-B1'),
+				'1.2.1-B2' => Array ('Core' => '5.2.1-B2'),
+				'1.2.1-RC1' => Array ('Core' => '5.2.1-RC1'),
+			);
+		}
+	}

Property changes on: releases/1.2.1-RC1/install/upgrades.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/install/upgrades.sql
===================================================================
--- releases/1.2.1-RC1/install/upgrades.sql	(nonexistent)
+++ releases/1.2.1-RC1/install/upgrades.sql	(revision 15887)
@@ -0,0 +1,70 @@
+# ===== v 1.0.0 =====
+
+# ===== v 1.0.1 =====
+UPDATE Modules SET LoadOrder = 10 WHERE `Name` = 'Custom';
+
+# ===== v 1.0.2-B1 =====
+ALTER TABLE Widgets CHANGE CreatedOn CreatedOn INT(11) NULL DEFAULT NULL;
+UPDATE Modules SET TemplatePath = 'custom/' WHERE Name = 'Custom';
+
+# ===== v 1.0.2-B2 =====
+
+# ===== v 1.0.2-RC1 =====
+
+# ===== v 1.0.2 =====
+
+# ===== v 1.0.3-B1 =====
+
+# ===== v 1.0.3-RC1 =====
+
+# ===== v 1.0.3 =====
+
+# ===== v 1.0.4-B1 =====
+
+# ===== v 1.0.4 =====
+
+# ===== v 1.1.0-B1 =====
+UPDATE Modules SET Path = 'modules/custom/' WHERE `Name` = 'Custom';
+
+# ===== v 1.1.0-B2 =====
+
+# ===== v 1.1.0-RC1 =====
+
+# ===== v 1.1.0 =====
+
+# ===== v 1.1.1-B1 =====
+
+# ===== v 1.1.1-RC1 =====
+
+# ===== v 1.1.1 =====
+
+# ===== v 1.1.2-B1 =====
+
+# ===== v 1.1.2-RC1 =====
+
+# ===== v 1.1.2 =====
+
+# ===== v 1.1.3-B1 =====
+
+# ===== v 1.1.3-B2 =====
+
+# ===== v 1.1.3 =====
+
+# ===== v 1.2.0-B1 =====
+
+# ===== v 1.2.0-B2 =====
+
+# ===== v 1.2.0-B3 =====
+
+# ===== v 1.2.0-RC1 =====
+
+# ===== v 1.2.0 =====
+
+# ===== v 1.2.1-B1 =====
+
+# ===== v 1.2.1-B2 =====
+UPDATE Modules
+SET ClassNamespace = 'Intechnic\\InPortal\\Modules\\Custom'
+WHERE `Name` = 'Custom';
+
+# ===== v 1.2.1-RC1 =====

Property changes on: releases/1.2.1-RC1/install/upgrades.sql
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.4.2
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/install_data.sql
===================================================================
--- releases/1.2.1-RC1/install/install_data.sql	(nonexistent)
+++ releases/1.2.1-RC1/install/install_data.sql	(revision 15887)
@@ -0,0 +1,7 @@
+INSERT INTO Permissions VALUES(DEFAULT, 'custom.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES(DEFAULT, 'custom:widgets.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES(DEFAULT, 'custom:widgets.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES(DEFAULT, 'custom:widgets.add', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES(DEFAULT, 'custom:widgets.view', 11, 1, 1, 0);
+
+INSERT INTO Modules VALUES ('Custom', 'modules/custom/', 'Intechnic\\InPortal\\Modules\\Custom', 'custom-sections', DEFAULT, 1, 10, 'custom/', 0, NULL, NULL);

Property changes on: releases/1.2.1-RC1/install/install_data.sql
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.2.2.3
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/install_schema.sql
===================================================================
--- releases/1.2.1-RC1/install/install_schema.sql	(nonexistent)
+++ releases/1.2.1-RC1/install/install_schema.sql	(revision 15887)
@@ -0,0 +1,17 @@
+CREATE TABLE Widgets (
+  WidgetId int(11) NOT NULL AUTO_INCREMENT,
+  Title varchar(255) NOT NULL DEFAULT '',
+  Description text,
+  Email varchar(255) NOT NULL DEFAULT '',
+  `Type` tinyint(4) NOT NULL DEFAULT '1',
+  Phone varchar(50) NOT NULL DEFAULT '',
+  Qty double NOT NULL DEFAULT '0',
+  `Status` tinyint(4) NOT NULL DEFAULT '2',
+  CreatedOn int(10) unsigned DEFAULT NULL,
+  Good tinyint(4) NOT NULL DEFAULT '0',
+  BirthTime int(10) unsigned DEFAULT NULL,
+  Image text,
+  DataFile text,
+  PRIMARY KEY (WidgetId)
+);
+

Property changes on: releases/1.2.1-RC1/install/install_schema.sql
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.4.2.1
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/project_upgrades.sql
===================================================================
--- releases/1.2.1-RC1/install/project_upgrades.sql	(nonexistent)
+++ releases/1.2.1-RC1/install/project_upgrades.sql	(revision 15887)
@@ -0,0 +1,2 @@
+# r1: Initial Project Task (#TASK_ID)
+

Property changes on: releases/1.2.1-RC1/install/project_upgrades.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/install_order.txt
===================================================================
--- releases/1.2.1-RC1/install/install_order.txt	(nonexistent)
+++ releases/1.2.1-RC1/install/install_order.txt	(revision 15887)
@@ -0,0 +1 @@
+203
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/install/install_order.txt
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/module_info.xml
===================================================================
--- releases/1.2.1-RC1/install/module_info.xml	(nonexistent)
+++ releases/1.2.1-RC1/install/module_info.xml	(revision 15887)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module_info>
+	<name>Custom</name>
+	<description>Development Kit</description>
+	<image>modules/custom/install/img/icon_development_kit.gif</image>
+</module_info>
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/install/module_info.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/.htaccess
===================================================================
--- releases/1.2.1-RC1/install/.htaccess	(nonexistent)
+++ releases/1.2.1-RC1/install/.htaccess	(revision 15887)
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/install/.htaccess
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/remove_schema.sql
===================================================================
--- releases/1.2.1-RC1/install/remove_schema.sql	(nonexistent)
+++ releases/1.2.1-RC1/install/remove_schema.sql	(revision 15887)
@@ -0,0 +1 @@
+DROP TABLE Widgets;
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/install/remove_schema.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/img/.htaccess
===================================================================
--- releases/1.2.1-RC1/install/img/.htaccess	(nonexistent)
+++ releases/1.2.1-RC1/install/img/.htaccess	(revision 15887)
@@ -0,0 +1 @@
+allow from all
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/install/img/.htaccess
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install/img/icon_development_kit.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: releases/1.2.1-RC1/install/img/icon_development_kit.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: releases/1.2.1-RC1/admin_templates/img/icons/icon46_custom.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: releases/1.2.1-RC1/admin_templates/img/icons/icon46_custom.png
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: releases/1.2.1-RC1/admin_templates/img/icons/icon46_conf_custom.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: releases/1.2.1-RC1/admin_templates/img/icons/icon46_conf_custom.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: releases/1.2.1-RC1/admin_templates/img/icons/icon24_conf_custom.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: releases/1.2.1-RC1/admin_templates/img/icons/icon24_conf_custom.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: releases/1.2.1-RC1/admin_templates/img/icons/icon24_custom.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: releases/1.2.1-RC1/admin_templates/img/icons/icon24_custom.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: releases/1.2.1-RC1/admin_templates/img/toolbar/dummy
===================================================================
Index: releases/1.2.1-RC1/admin_templates/img/toolbar/dummy
===================================================================
--- releases/1.2.1-RC1/admin_templates/img/toolbar/dummy	(nonexistent)
+++ releases/1.2.1-RC1/admin_templates/img/toolbar/dummy	(revision 15887)

Property changes on: releases/1.2.1-RC1/admin_templates/img/toolbar/dummy
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: releases/1.2.1-RC1/admin_templates/img/logo_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: releases/1.2.1-RC1/admin_templates/img/logo_bg.gif
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: releases/1.2.1-RC1/admin_templates/widgets/widget_edit.tpl
===================================================================
--- releases/1.2.1-RC1/admin_templates/widgets/widget_edit.tpl	(nonexistent)
+++ releases/1.2.1-RC1/admin_templates/widgets/widget_edit.tpl	(revision 15887)
@@ -0,0 +1,91 @@
+<inp2:adm_SetPopupSize width="750" height="570"/>
+
+<inp2:m_DefaultParam prefix="widget" grid="Default" title_preset="widget_edit" section="custom:widgets" id_field="WidgetId"/>
+
+<inp2:m_include t="incs/header"/>
+<inp2:m_RenderElement name="combined_header" section="$section" prefix="$prefix" title_preset="$title_preset"/>
+
+<!-- ToolBar -->
+<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
+<tbody>
+	<tr>
+  	<td>
+  		<script type="text/javascript">
+				a_toolbar = new ToolBar();
+				a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() {
+						submit_event('<inp2:m_Param name="prefix"/>','<inp2:{$prefix}_SaveEvent/>');
+					}
+				));
+				a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
+						cancel_edit('<inp2:m_Param name="prefix"/>','OnCancelEdit','<inp2:{$prefix}_SaveEvent/>','<inp2:m_Phrase label="la_FormCancelConfirmation" escape="1"/>');
+					}
+				));
+
+				a_toolbar.AddButton( new ToolBarButton('reset_edit', '<inp2:m_phrase label="la_ToolTip_Reset" escape="1"/>', function() {
+						reset_form('<inp2:m_Param name="prefix"/>', 'OnReset', '<inp2:m_Phrase label="la_FormResetConfirmation" escape="1"/>');
+					}
+				));
+
+				a_toolbar.AddButton( new ToolBarSeparator('sep1') );
+
+				a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
+							go_to_id('<inp2:m_Param name="prefix"/>', '<inp2:{$prefix}_PrevId/>');
+						}
+				));
+				a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
+							go_to_id('<inp2:m_Param name="prefix"/>', '<inp2:{$prefix}_NextId/>');
+						}
+				));
+
+				a_toolbar.Render();
+
+				<inp2:m_if check="{$prefix}_IsSingle" >
+					a_toolbar.HideButton('prev');
+					a_toolbar.HideButton('next');
+					a_toolbar.HideButton('sep1');
+				<inp2:m_else/>
+					<inp2:m_if check="{$prefix}_IsLast" >
+						a_toolbar.DisableButton('next');
+					</inp2:m_if>
+					<inp2:m_if check="{$prefix}_IsFirst" >
+						a_toolbar.DisableButton('prev');
+					</inp2:m_if>
+				</inp2:m_if>
+			</script>
+
+			<script type="text/javascript" src="js/swfobject.js"></script>
+			<script type="text/javascript" src="<inp2:m_Compress files='js/uploader/upload_manager.js|js/uploader/uploader.js'/>"></script>
+		</td>
+	</tr>
+</tbody>
+</table>
+
+<inp2:{$prefix}_SaveWarning name="grid_save_warning"/>
+<inp2:{$prefix}_ErrorWarning name="form_error_warning"/>
+
+<div id="scroll_container">
+	<table class="edit-form">
+		<inp2:m_RenderElement name="subsection" title="la_section_Page"/>
+			<inp2:m_RenderElement name="inp_id_label" prefix="$prefix" field="$id_field" title="la_fld_Id"/>
+			<inp2:m_RenderElement name="inp_edit_box" prefix="$prefix" field="Title" style="width: 100px"/>
+			<inp2:m_RenderElement name="inp_edit_checkbox" prefix="$prefix" field="Good"/>
+			<inp2:m_RenderElement name="inp_edit_fck" prefix="$prefix" field="Description"/>
+			<inp2:m_RenderElement name="inp_edit_radio" prefix="$prefix" field="Status"/>
+			<inp2:m_RenderElement name="inp_edit_options" prefix="$prefix" field="Type" has_empty="1"/>
+
+		<!--##
+			<inp2:m_RenderElement name="inp_edit_date" prefix="$prefix" field="CreatedOn"/>
+			<inp2:m_RenderElement name="inp_edit_checkbox" prefix="$prefix" field="IsSystem" title="la_fld_IsSystemTemplate" onchange="OnSystemClick()"/>
+		##-->
+
+			<inp2:m_RenderElement name="inp_edit_box" prefix="$prefix" field="Qty" style="width: 50px"/>
+			<inp2:m_RenderElement name="inp_edit_textarea" prefix="$prefix" field="Phone"/>
+			<inp2:m_RenderElement name="inp_edit_box" prefix="$prefix" field="Email" style="width: 200px"/>
+
+			<inp2:m_RenderElement name="inp_edit_swf_upload" prefix="$prefix" field="Image"/>
+			<inp2:m_RenderElement name="inp_edit_swf_upload" prefix="$prefix" field="DataFile"/>
+			<inp2:m_RenderElement name="inp_edit_filler"/>
+	</table>
+</div>
+
+<inp2:m_include t="incs/footer"/>
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/admin_templates/widgets/widget_edit.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/admin_templates/widgets/widget_list.tpl
===================================================================
--- releases/1.2.1-RC1/admin_templates/widgets/widget_list.tpl	(nonexistent)
+++ releases/1.2.1-RC1/admin_templates/widgets/widget_list.tpl	(revision 15887)
@@ -0,0 +1,140 @@
+<inp2:m_DefaultParam prefix="widget" grid="Default" title_preset="widget_list" section="custom:widgets" edit_template="custom/widgets/widget_edit" id_field="WidgetId"/>
+
+<inp2:m_include t="incs/header" />
+<inp2:m_RenderElement name="combined_header" prefix="$prefix" section="$section" title_preset="$title_preset" pagination="1"/>
+
+<!-- ToolBar -->
+<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
+<tbody>
+	<tr>
+  		<td>
+	  		<table width="100%" cellpadding="0" cellspacing="0">
+	  			<tr>
+	  				<td>
+		  				<script type="text/javascript">
+							a_toolbar = new ToolBar();
+
+							a_toolbar.AddButton(
+								new ToolBarButton(
+									'new_item',
+									'<inp2:m_phrase label="la_ToolTip_NewWidget" escape="1"/>::<inp2:m_phrase label="la_Add" escape="1"/>',
+									function() {
+										std_precreate_item('<inp2:m_Param name="prefix"/>', '<inp2:m_Param name="edit_template"/>')
+									}
+								)
+							);
+
+							function edit() {
+							  	std_edit_item('<inp2:m_Param name="prefix"/>', '<inp2:m_Param name="edit_template"/>');
+							}
+
+							a_toolbar.AddButton(
+								new ToolBarButton(
+									'edit',
+									'<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>::<inp2:m_phrase label="la_ShortToolTip_Edit" escape="1"/>',
+									edit
+								)
+							);
+
+							a_toolbar.AddButton(
+								new ToolBarButton(
+									'delete',
+									'<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
+									function() {
+										std_delete_items('<inp2:m_Param name="prefix"/>');
+									}
+								)
+							);
+
+							a_toolbar.AddButton( new ToolBarSeparator('sep1') );
+
+							a_toolbar.AddButton(
+								new ToolBarButton(
+									'approve',
+									'<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>',
+									function() {
+										submit_event('<inp2:m_Param name="prefix"/>', 'OnMassApprove');
+									}
+			 					)
+			 				);
+
+							a_toolbar.AddButton(
+								new ToolBarButton(
+									'decline',
+									'<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>',
+									function() {
+										submit_event('<inp2:m_Param name="prefix"/>', 'OnMassDecline');
+									}
+							 	)
+							);
+
+							a_toolbar.AddButton( new ToolBarSeparator('sep2') );
+
+							a_toolbar.AddButton(
+								new ToolBarButton(
+									'export',
+									'<inp2:m_phrase label="la_ToolTip_Export" escape="1"/>',
+									function() {
+										std_csv_export('<inp2:m_Param name="prefix"/>', '<inp2:m_Param name="grid"/>', 'export/export_progress');
+									}
+								)
+							);
+
+							a_toolbar.AddButton(
+								new ToolBarButton(
+									'import',
+									'<inp2:m_phrase label="la_ToolTip_Import" escape="1"/>',
+									function() {
+										std_csv_import('<inp2:m_Param name="prefix"/>', '<inp2:m_Param name="grid"/>', 'import/import_start');
+									}
+								)
+							);
+
+							a_toolbar.AddButton( new ToolBarSeparator('sep3') );
+
+							a_toolbar.AddButton(
+								new ToolBarButton(
+									'view',
+									'<inp2:m_phrase label="la_ToolTip_View" escape="1"/>',
+									function(id) {
+										show_viewmenu(a_toolbar,'view');
+									}
+								)
+							);
+
+							a_toolbar.Render();
+						</script>
+	  				</td>
+
+	  				<inp2:m_RenderElement name="search_main_toolbar" prefix="$prefix" grid="$grid"/>
+	  			</tr>
+	  		</table>
+		</td>
+	</tr>
+</tbody>
+</table>
+
+<style type="text/css">
+	.red-row td.Status {
+		background-color: red;
+	}
+</style>
+
+<inp2:m_DefineElement name="grid_image_td">
+	<img src="<inp2:Field name='$field' format='resize:120x120'/>" <inp2:Field name='$field' format='resize:120x120;img_size' no_special='1'/> alt=""/><br />
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="grid_delete_td">
+	<a href="<inp2:m_Link {$PrefixSpecial}_event='OnDelete' pass='m,$PrefixSpecial'/>" onclick="return confirm('Delete Record?')">Delete</a>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="grid_custom_td">
+	<a href="<inp2:ItemEditLink/>" title="<inp2:m_Phrase name='la_Text_Edit' no_editing='1'/>" onclick="return direct_edit('<inp2:m_param name="PrefixSpecial"/>', this.href);"><inp2:Field field="$field" grid="$grid" format="$format"/></a>
+</inp2:m_DefineElement>
+
+<inp2:m_RenderElement name="grid" PrefixSpecial="$prefix" IdField="$id_field" grid="$grid" max_row_height="100"/>
+<script type="text/javascript">
+	Grids['<inp2:m_Param name="prefix"/>'].SetDependantToolbarButtons( new Array('edit', 'delete', 'approve', 'decline') );
+</script>
+
+<inp2:m_include t="incs/footer"/>
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/admin_templates/widgets/widget_list.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/install.php
===================================================================
--- releases/1.2.1-RC1/install.php	(nonexistent)
+++ releases/1.2.1-RC1/install.php	(revision 15887)
@@ -0,0 +1,38 @@
+<?php
+$module_folder = 'modules/custom';
+
+if ( !defined('IS_INSTALL') ) {
+	// separate module install
+	define('IS_INSTALL', 1);
+	define('ADMIN', 1);
+	define('FULL_PATH', realpath(dirname(__FILE__) . '/../..'));
+
+	include_once(FULL_PATH . '/core/kernel/startup.php');
+	require_once FULL_PATH . '/core/install/install_toolkit.php';
+
+	$constants_file = FULL_PATH . '/' . $module_folder . '/constants.php';
+
+	if ( file_exists($constants_file) ) {
+		require_once $constants_file;
+	}
+
+	$toolkit = new kInstallToolkit();
+}
+else {
+	// install, using installation wizard
+	$toolkit =& $this->toolkit;
+	/* @var $toolkit kInstallToolkit */
+}
+
+$application =& kApplication::Instance();
+$application->Init();
+
+if ( $application->RecallVar('user_id') != USER_ROOT ) {
+	die('restricted access!');
+}
+
+$toolkit->RunSQL('/' . $module_folder . '/install/install_schema.sql');
+$toolkit->RunSQL('/' . $module_folder . '/install/install_data.sql');
+$toolkit->ImportLanguage('/' . $module_folder . '/install/english');
+
+$toolkit->finalizeModuleInstall($module_folder, false);
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/install.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.1.1.2.1
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/sections_config.php
===================================================================
--- releases/1.2.1-RC1/units/sections/sections_config.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/sections_config.php	(revision 15887)
@@ -0,0 +1,130 @@
+<?php
+
+	/**
+	 * Custom-sections prefix
+	 *
+	 * @author dmitrya
+	 * @package Custom (Development Kit)
+	 */
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	$config = Array (
+
+		'Prefix' => 'custom-sections',
+
+		'ConfigPriority' => 2,
+
+		# Event handler class used for HOOKing to existing events (ie. )
+		'EventHandlerClass'	=> Array ('class' => 'CustomEventHandler', 'file' => 'custom_eh.php', 'build_event' => 'OnBuild'),
+
+		# Defined to draw new sections (if any) in left nav. tree, normally each unit has it's own Tag Processor
+		'TagProcessorClass' => Array ('class' => 'kDBTagProcessor', 'file' => '', 'build_event' => 'OnBuild'),
+
+		# Extend/override already existing classes (ie. Event Handlers, Tag Processors, Helpers)
+		'RegisterClasses' => Array (
+
+			# extend default User core/units/users/users_tag_processor.php / users_event_handler.php
+//			Array ('pseudo' => 'u_TagProcessor', 'class' => 'EUserTagProcessor', 'file' => 'users/e_user_tp.php'),
+//			Array ('pseudo' => 'u_EventHandler', 'class' => 'EUserEventHandler', 'file' => 'users/e_user_eh.php'),
+
+			# extend default Product classes /in-commerce/units/products/products_tag_processor.php / products_event_handler.php
+//			Array ('pseudo' => 'p_TagProcessor', 'class' => 'EProductTagProcessor', 'file' => 'products/e_product_tp.php'),
+//			Array ('pseudo' => 'p_EventHandler', 'class' => 'EProductEventHandler', 'file' => 'products/e_product_eh.php'),
+
+			# extend default Link /in-link/units/links/link_tag_processor.php / links_event_handler.php
+//			Array ('pseudo' => 'l_TagProcessor', 'class' => 'ELinkTagProcessor', 'file' => 'links/e_link_tp.php'),
+//			Array ('pseudo' => 'l_EventHandler', 'class' => 'ELinkEventHandler', 'file' => 'links/e_link_eh.php'),
+
+			# extend default Category /core/units/categories/categories_tag_processor.php / categories_event_handler.php
+//			Array ('pseudo' => 'c_TagProcessor', 'class' => 'ECategoryTagProcessor', 'file' => 'categories/e_category_tp.php'),
+//			Array ('pseudo' => 'c_EventHandler', 'class' => 'ECategoryEventHandler', 'file' => 'categories/e_category_eh.php'),
+
+			# extend default Article /in-news/units/articles/article_tag_processor.php / articles_event_handler.php
+//			Array ('pseudo' => 'n_TagProcessor', 'class' => 'EArticleTagProcessor', 'file' => 'articles/e_article_tp.php'),
+//			Array ('pseudo' => 'n_EventHandler', 'class' => 'EArticleEventHandler', 'file' => 'articles/e_article_eh.php'),
+
+		),
+
+		# Replace/substiture any admin default templates with custom ones
+		'ReplacementTemplates'	=>	Array (
+			# replace default image block with custom template
+//			'incs/image_blocks' => 'custom/incs/image_blocks',
+
+			# replace default edit link template
+//			'in-links/links/links_edit' => 'custom/links/links_edit',
+
+			# replace default edit category template
+//			'categories/categories_edit' => 'custom/categories/categories_edit',
+		),
+
+		# Hooks to events that may call any other events
+		'Hooks' => Array (
+
+			# hook to OnAfterCacheRebuild event of "adm" prefix (tiggered when unit cache is rebuild and stored) called
+			# to override cloned sub-items (ie. register extended classes for cloned unit configs such as n-img, n-rev)
+			/*Array (
+				'Mode' => hAFTER,
+				'Conditional' => false,
+				'HookToPrefix' => 'adm',
+				'HookToSpecial' => '*',
+				'HookToEvent' => Array ('OnAfterCacheRebuild'),
+				'DoPrefix' => '',
+				'DoSpecial' => '*',
+				'DoEvent' => 'OnOverrideClonedSubItems',
+			),*/
+
+			# hook to category OnAfterConfigRead event called to customize category configuration settings
+			/*Array (
+				'Mode' => hAFTER,
+				'Conditional' => false,
+				'HookToPrefix' => 'c',
+				'HookToSpecial' => '*',
+				'HookToEvent' => Array ('OnAfterConfigRead'),
+				'DoPrefix' => '',
+				'DoSpecial' => '*',
+				'DoEvent' => 'OnModifyCategoriesConfig',
+			),*/
+		),
+
+		'PermSection' => Array ('main' => 'custom', 'email' => 'custom:configuration_email'),
+
+		# New sections in left navigation
+		'Sections' => Array (
+			'custom' => Array (
+				'parent'		=>	'in-portal:root',
+				'icon'			=>	'conf_custom',
+				'label'			=>	'la_title_Custom',
+				'url'			=>	Array ('t' => 'index', 'pass' => 'm'),
+				'permissions'	=>	Array ('view'),
+				'priority'		=>	2.4,
+				'container'		=>	true,
+				'show_mode'		=>	smDEBUG,
+				'type'			=>	stTREE,
+			),
+
+			'custom:setting_folder' => Array (
+				'parent'		=>	'in-portal:system',
+				'icon'			=>	'conf_custom',
+				'label'			=>	'la_title_Custom',
+				'use_parent_header' => 1,
+				'url'			=>	Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
+				'permissions'	=>	Array ('view'),
+				'priority'		=>	3.6,
+				'container'		=>	true,
+				'show_mode'		=>	smDEBUG,
+				'type'			=>	stTREE,
+			),
+
+			'custom:configuration_custom' => Array (
+				'parent'		=>	'custom:setting_folder',
+				'icon'			=>	'custom',
+				'label'			=>	'la_tab_ConfigOutput',
+				'url'			=>	Array('t' => 'config/config_universal', 'pass_section' => true, 'pass' => 'm'),
+				'permissions'	=>	Array('view', 'edit'),
+				'priority'		=>	50,
+				'type'			=>	stTREE,
+			),
+		),
+
+	);
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/sections/sections_config.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.4
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/users/e_user_tp.php
===================================================================
--- releases/1.2.1-RC1/units/sections/users/e_user_tp.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/users/e_user_tp.php	(revision 15887)
@@ -0,0 +1,37 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends default UsersTagProcessor class
+	 *
+	 */
+	class EUserTagProcessor extends UsersTagProcessor  {
+
+		/**
+		 * Returns formated user address
+		 *
+		 * @param Array
+		 * @return string
+		 */
+		function PrintFormattedUserAddress($params)
+		{
+			$object = $this->getObject($params);
+			/* @var $object kDBItem */
+
+			$ret = '';
+			$newline = '<br/>';
+
+			if ($object->isLoaded()) {
+				$ret = $object->GetField('Street') ? $object->GetField('Street') . $newline : '';
+				$ret .= $object->GetField('Street2') ? $object->GetField('Street2') . $newline : '';
+				$ret .= $object->GetField('City') ? $object->GetField('City') . ', ' : '';
+				$ret .= $object->GetField('State') ? $object->GetField('State') . ' ' : '';
+				$ret .= $object->GetField('Zip') ? $object->GetField('Zip') . $newline : '';
+				$ret .= $object->GetField('Country');
+			}
+
+			return $ret;
+		}
+
+	}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/sections/users/e_user_tp.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/users/e_user_eh.php
===================================================================
--- releases/1.2.1-RC1/units/sections/users/e_user_eh.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/users/e_user_eh.php	(revision 15887)
@@ -0,0 +1,214 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends default UsersEventHandler class
+	 *
+	 */
+	class EUserEventHandler extends UsersEventHandler {
+
+		/**
+		 * Allows to override standard permission mapping
+		 *
+		 * @return void
+		 * @access protected
+		 * @see kEventHandler::$permMapping
+		 */
+		protected function mapPermissions()
+		{
+			parent::mapPermissions();
+
+			$permissions = Array (
+				'OnCustomEvent1' =>	Array ('self' => true),
+				'OnCustomEvent2' => Array ('self' => true),
+			);
+
+			$this->permMapping = array_merge($this->permMapping, $permissions);
+		}
+
+		/**
+		 * Checks user permission to execute given $event
+		 *
+		 * @param kEvent $event
+		 * @return bool
+		 * @access public
+		 */
+		public function CheckPermission(kEvent $event)
+		{
+			$skip_permissions_check_events = Array (
+				'OnAnotherCustomEvent',
+			);
+
+			if ( in_array($event->Name, $skip_permissions_check_events) ) {
+				return true;
+			}
+
+			return parent::CheckPermission($event);
+		}
+
+		/**
+		 * Occurs, when config was parsed, allows to change config data dynamically
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterConfigRead(kEvent $event)
+		{
+			parent::OnAfterConfigRead($event);
+
+			# 1. Regular Fields from /core/units/users/users_config.php
+			$fields = $this->Application->getUnitOption($event->Prefix, 'Fields'); #get regular fields
+//			$fields['Status']['default'] = 1; #add/edit configuration (make default = 1)
+			$this->Application->setUnitOption($event->Prefix, 'Fields', $fields); #save regular fields
+
+			# 2. Virtual Fields from /core/units/users/users_config.php
+			$virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields'); #get virtual fields
+//			$virtual_fields['FullName']['default'] = ''; #add/edit configuration
+			$this->Application->setUnitOption($event->Prefix, 'VirtualFields', $virtual_fields); #save virtual fields
+		}
+
+		/**
+		 * Apply any custom changes to list's sql query
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 * @see kDBEventHandler::OnListBuild()
+		 */
+		protected function SetCustomQuery(kEvent $event)
+		{
+			parent::SetCustomQuery($event);
+
+			$object = $event->getObject();
+			/* @var $object kDBList */
+
+			# identifying event based on special and setting filter
+			if ( $event->Special == 'custom-special' ) {
+//				$object->addFilter('primary_filter', '%1$s.Status = ' . STATUS_DISABLED);
+			}
+
+			# identifying event based not admin condition and setting filter
+			if ( !$this->Application->isAdminUser ) {
+//				$object->addFilter('status_filter', '%1$s.Status = ' . STATUS_ACTIVE);
+			}
+		}
+
+		/**
+		 * Set's new unique resource id to user
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemCreate(kEvent $event)
+		{
+			parent::OnBeforeItemCreate($event);
+
+
+		}
+
+		/**
+		 * Checks state against country
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemUpdate(kEvent $event)
+		{
+			parent::OnBeforeItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs before deleting item, id of item being
+		 * deleted is stored as 'id' event param
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemDelete(kEvent $event)
+		{
+			parent::OnBeforeItemDelete($event);
+
+
+		}
+
+		/**
+		 * Occurs before loading item, 'id' parameter
+		 * allows to get id of item being loaded
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemLoad(kEvent $event)
+		{
+			parent::OnBeforeItemLoad($event);
+
+
+		}
+
+
+		/**
+		 * Redirects user after successful registration to confirmation template (on Front only)
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemCreate(kEvent $event)
+		{
+			parent::OnAfterItemCreate($event);
+
+
+		}
+
+		/**
+		 * Occurs after updating item
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemUpdate(kEvent $event)
+		{
+			parent::OnAfterItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs after deleting item, id of deleted item
+		 * is stored as 'id' param of event
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemDelete(kEvent $event)
+		{
+			parent::OnAfterItemDelete($event);
+
+
+		}
+
+		/**
+		 * Loads user images
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemLoad(kEvent $event)
+		{
+			parent::OnAfterItemLoad($event);
+
+
+		}
+
+	}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/sections/users/e_user_eh.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/links/e_link_eh.php
===================================================================
--- releases/1.2.1-RC1/units/sections/links/e_link_eh.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/links/e_link_eh.php	(revision 15887)
@@ -0,0 +1,215 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends default LinksEventHandler class
+	 *
+	 */
+	class ELinkEventHandler extends LinksEventHandler {
+
+		/**
+		 * Allows to override standard permission mapping
+		 *
+		 * @return void
+		 * @access protected
+		 * @see kEventHandler::$permMapping
+		 */
+		function mapPermissions()
+		{
+			parent::mapPermissions();
+
+			$permissions = Array (
+				'OnCustomEvent1' => Array ('self' => true),
+				'OnCustomEvent2' => Array ('self' => true),
+			);
+
+			$this->permMapping = array_merge($this->permMapping, $permissions);
+		}
+
+		/**
+		 * Checks user permission to execute given $event
+		 *
+		 * @param kEvent $event
+		 * @return bool
+		 * @access public
+		 */
+		public function CheckPermission(kEvent $event)
+		{
+			$skip_permissions_check_events = Array (
+				'OnAnotherCustomEvent',
+			);
+
+			if ( in_array($event->Name, $skip_permissions_check_events) ) {
+				return true;
+			}
+
+			return parent::CheckPermission($event);
+		}
+
+		/**
+		 * Occurs, when config was parsed, allows to change config data dynamically
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterConfigRead(kEvent $event)
+		{
+			parent::OnAfterConfigRead($event);
+
+			# 1. Regular Fields from /in-link/units/links/links_config.php
+			$fields = $this->Application->getUnitOption($event->Prefix, 'Fields'); #get regular fields
+//			$fields['Status']['default'] = STATUS_ACTIVE; #add/edit configuration (make default = STATUS_ACTIVE)
+			$this->Application->setUnitOption($event->Prefix, 'Fields', $fields); #save fields
+
+			# 2. Virtual Fields from /in-link/units/links/links_config.php
+			$virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields'); #get virtual fields
+//			$virtual_fields['UserName']['default'] = ''; #add/edit configuration
+			$this->Application->setUnitOption($event->Prefix, 'VirtualFields', $virtual_fields); #save virtual fields
+		}
+
+		/**
+		 * Apply any custom changes to list's sql query
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 * @see kDBEventHandler::OnListBuild()
+		 */
+		protected function SetCustomQuery(kEvent $event)
+		{
+			parent::SetCustomQuery($event);
+
+			$object = $event->getObject();
+			/* @var $object kDBList */
+
+			# identifying event based on special and setting filter
+			if ( $event->Special == 'custom-special' ) {
+//				$object->addFilter('primary_filter', '%1$s.Status = ' . STATUS_DISABLED);
+			}
+
+			# identifying event based not admin condition and setting filter
+			if ( !$this->Application->isAdminUser ) {
+//				$object->addFilter('status_filter', '%1$s.Status = ' . STATUS_ACTIVE);
+			}
+		}
+
+		/**
+		 * Makes reciprocal check on link, when it is created
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemCreate(kEvent $event)
+		{
+			parent::OnBeforeItemCreate($event);
+
+
+		}
+
+		/**
+		 * Makes reciprocal check on link, when it is updated
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemUpdate(kEvent $event)
+		{
+			parent::OnBeforeItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs before deleting item, id of item being
+		 * deleted is stored as 'id' event param
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemDelete(kEvent $event)
+		{
+			parent::OnBeforeItemDelete($event);
+
+
+		}
+
+		/**
+		 * Occurs before loading item, 'id' parameter
+		 * allows to get id of item being loaded
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemLoad(kEvent $event)
+		{
+			parent::OnBeforeItemLoad($event);
+
+
+		}
+
+
+		/**
+		 * Sets values for import process
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemCreate(kEvent $event)
+		{
+			parent::OnAfterItemCreate($event);
+
+
+		}
+
+		/**
+		 * Occurs after updating item
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemUpdate(kEvent $event)
+		{
+			parent::OnAfterItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs after deleting item, id of deleted item
+		 * is stored as 'id' param of event
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemDelete(kEvent $event)
+		{
+			parent::OnAfterItemDelete($event);
+
+
+		}
+
+		/**
+		 * Occurs after loading item, 'id' parameter
+		 * allows to get id of item that was loaded
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemLoad(kEvent $event)
+		{
+			parent::OnAfterItemLoad($event);
+
+
+		}
+
+	}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/sections/links/e_link_eh.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/links/e_link_tp.php
===================================================================
--- releases/1.2.1-RC1/units/sections/links/e_link_tp.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/links/e_link_tp.php	(revision 15887)
@@ -0,0 +1,28 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends default LinkTagProcessor class
+	 *
+	 */
+	class ELinkTagProcessor extends LinkTagProcessor {
+
+		/**
+		 * Adding custom processing to existing Field method
+		 *
+		 * @param Array $params
+		 * @return string
+		 */
+		function FormattedField($params)
+		{
+			// get from parent
+			$o = parent::Field($params);
+
+			// do some custom stuff here
+			$o = trim($o);
+
+			return $o;
+		}
+		
+	}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/sections/links/e_link_tp.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/products/e_product_eh.php
===================================================================
--- releases/1.2.1-RC1/units/sections/products/e_product_eh.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/products/e_product_eh.php	(revision 15887)
@@ -0,0 +1,215 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends/overrides methods of default ProductsEventHandler class
+	 *
+	 */
+	class EProductEventHandler extends ProductsEventHandler {
+
+		/**
+		 * Allows to override standard permission mapping
+		 *
+		 * @return void
+		 * @access protected
+		 * @see kEventHandler::$permMapping
+		 */
+		protected function mapPermissions()
+		{
+			parent::mapPermissions();
+
+			$permissions = Array (
+				'OnCustomEvent1' => Array ('self' => true),
+				'OnCustomEvent2' => Array ('self' => true),
+			);
+
+			$this->permMapping = array_merge($this->permMapping, $permissions);
+		}
+
+		/**
+		 * Checks user permission to execute given $event
+		 *
+		 * @param kEvent $event
+		 * @return bool
+		 * @access public
+		 */
+		public function CheckPermission(kEvent $event)
+		{
+			$skip_permissions_check_events = Array (
+				'OnAnotherCustomEvent',
+			);
+
+			if ( in_array($event->Name, $skip_permissions_check_events) ) {
+				return true;
+			}
+
+			return parent::CheckPermission($event);
+		}
+
+		/**
+		 * Occurs, when config was parsed, allows to change config data dynamically
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterConfigRead(kEvent $event)
+		{
+			parent::OnAfterConfigRead($event);
+
+			# 1. Regular Fields from /in-commerce/units/products/products_config.php
+			$fields = $this->Application->getUnitOption($event->Prefix, 'Fields'); #get regular fields
+//			$fields['Status']['default'] = STATUS_ACTIVE; #add/edit field configuration (make default = STATUS_ACTIVE)
+			$this->Application->setUnitOption($event->Prefix, 'Fields', $fields); #save regular fields
+
+
+			# 2. Virtual Fields from /in-commerce/units/products/products_config.php
+			$virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields'); #get virtual fields
+//			$virtual_fields['Qty']['default'] = 1; #add/edit field configuration
+			$this->Application->setUnitOption($event->Prefix, 'VirtualFields', $virtual_fields); # save virtual fields
+		}
+
+		/**
+		 * Apply any custom changes to list's sql query
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 * @see kDBEventHandler::OnListBuild()
+		 */
+		protected function SetCustomQuery(kEvent $event)
+		{
+			parent::SetCustomQuery($event);
+
+			$object = $event->getObject();
+			/* @var $object kDBList */
+
+			# identifying event based on special and setting filter
+			if ( $event->Special == 'custom-special' ) {
+//				$object->addFilter('primary_filter', '%1$s.Status = '.STATUS_DISABLED);
+			}
+
+			# identifying event based not admin condition and setting filter
+			if ( !$this->Application->isAdminUser ) {
+//				$object->addFilter('status_filter', '%1$s.Status = '.STATUS_ACTIVE);
+			}
+		}
+
+		/**
+		 * Sets default processing data for subscriptions
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemCreate(kEvent $event)
+		{
+			parent::OnBeforeItemCreate($event);
+
+
+		}
+
+		/**
+		 * Moves item to preferred category, updates item hits
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemUpdate(kEvent $event)
+		{
+			parent::OnBeforeItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs before deleting item, id of item being
+		 * deleted is stored as 'id' event param
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemDelete(kEvent $event)
+		{
+			parent::OnBeforeItemDelete($event);
+
+
+		}
+
+		/**
+		 * Occurs before loading item, 'id' parameter
+		 * allows to get id of item being loaded
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemLoad(kEvent $event)
+		{
+			parent::OnBeforeItemLoad($event);
+
+
+		}
+
+		/**
+		 * Set new price to ProductsPricing
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemCreate(kEvent $event)
+		{
+			parent::OnAfterItemCreate($event);
+
+
+		}
+
+		/**
+		 * Occurs after updating item
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemUpdate(kEvent $event)
+		{
+			parent::OnAfterItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs after deleting item, id of deleted item
+		 * is stored as 'id' param of event
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemDelete(kEvent $event)
+		{
+			parent::OnAfterItemDelete($event);
+
+
+		}
+
+		/**
+		 * Occurs after loading item, 'id' parameter
+		 * allows to get id of item that was loaded
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemLoad(kEvent $event)
+		{
+			parent::OnAfterItemLoad($event);
+
+
+		}
+
+	}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/sections/products/e_product_eh.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/products/e_product_tp.php
===================================================================
--- releases/1.2.1-RC1/units/sections/products/e_product_tp.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/products/e_product_tp.php	(revision 15887)
@@ -0,0 +1,28 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends/overrides methods of default ProductsTagProcessor class
+	 *
+	 */
+	class EProductTagProcessor extends ProductsTagProcessor {
+
+		/**
+		 * Adding custom processing to existing Field method
+		 *
+		 * @param Array $params
+		 * @return string
+		 */
+		function FormattedField($params)
+		{
+			// get from parent
+			$o = parent::Field($params);
+
+			// do some custom stuff here
+			$o = trim($o);
+
+			return $o;
+		}
+
+	}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/sections/products/e_product_tp.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/categories/e_category_eh.php
===================================================================
--- releases/1.2.1-RC1/units/sections/categories/e_category_eh.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/categories/e_category_eh.php	(revision 15887)
@@ -0,0 +1,213 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends default CategoriesEventHandler class
+	 *
+	 */
+	class ECategoryEventHandler extends CategoriesEventHandler {
+
+		/**
+		 * Allows to override standard permission mapping
+		 *
+		 * @return void
+		 * @access protected
+		 * @see kEventHandler::$permMapping
+		 */
+		protected function mapPermissions()
+		{
+			parent::mapPermissions();
+
+			$permissions = Array (
+				'OnCustomEvent1' => Array ('self' => true),
+				'OnCustomEvent2' => Array ('self' => true),
+			);
+
+			$this->permMapping = array_merge($this->permMapping, $permissions);
+		}
+
+		/**
+		 * Checks user permission to execute given $event
+		 *
+		 * @param kEvent $event
+		 * @return bool
+		 * @access public
+		 */
+		public function CheckPermission(kEvent $event)
+		{
+			$skip_permissions_check_events = Array (
+				'OnAnotherCustomEvent',
+			);
+
+			if ( in_array($event->Name, $skip_permissions_check_events) ) {
+				return true;
+			}
+
+			return parent::CheckPermission($event);
+		}
+
+		/**
+		 * Updates structure config
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterConfigRead(kEvent $event)
+		{
+			parent::OnAfterConfigRead($event);
+
+			# 1. Regular Fields from /core/units/categories/categories_config.php
+			$fields = $this->Application->getUnitOption($event->Prefix, 'Fields'); #get regular fields
+//			$fields['Status']['default'] = STATUS_ACTIVE; #add/edit configuration (make default = STATUS_ACTIVE)
+			$this->Application->setUnitOption($event->Prefix, 'Fields', $fields); #save fields
+
+			# 2. Virtual Fields from /core/units/categories/categories_config.php
+			$virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields'); #get virtual fields
+//			$virtual_fields['UserName']['default'] = ''; #add/edit configuration
+			$this->Application->setUnitOption($event->Prefix, 'VirtualFields', $virtual_fields); #save virtual fields
+		}
+
+		/**
+		 * Apply any custom changes to list's sql query
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 * @see kDBEventHandler::OnListBuild()
+		 */
+		protected function SetCustomQuery(kEvent $event)
+		{
+			parent::SetCustomQuery($event);
+
+			$object = $event->getObject();
+			/* @var $object kDBList */
+
+			# identifying event based on special and setting filter
+			if ( $event->Special == 'custom-special' ) {
+//				$object->addFilter('primary_filter', '%1$s.Status = ' . STATUS_DISABLED);
+			}
+
+			# identifying event based not admin condition and setting filter
+			if ( !$this->Application->isAdminUser ) {
+//				$object->addFilter('status_filter', '%1$s.Status = ' . STATUS_ACTIVE);
+			}
+		}
+
+		/**
+		 * Sets correct status for new categories created on front-end
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemCreate(kEvent $event)
+		{
+			parent::OnBeforeItemCreate($event);
+
+
+		}
+
+		/**
+		 * Sets correct status for new categories created on front-end
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemUpdate(kEvent $event)
+		{
+			parent::OnBeforeItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs before deleting item, id of item being
+		 * deleted is stored as 'id' event param
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemDelete(kEvent $event)
+		{
+			parent::OnBeforeItemDelete($event);
+
+
+		}
+
+		/**
+		 * Occurs before loading item, 'id' parameter
+		 * allows to get id of item being loaded
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemLoad(kEvent $event)
+		{
+			parent::OnBeforeItemLoad($event);
+
+
+		}
+
+		/**
+		 * Occurs after creating item
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemCreate(kEvent $event)
+		{
+			parent::OnAfterItemCreate($event);
+
+
+		}
+
+		/**
+		 * Occurs after updating item
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemUpdate(kEvent $event)
+		{
+			parent::OnAfterItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs after deleting item, id of deleted item
+		 * is stored as 'id' param of event
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemDelete(kEvent $event)
+		{
+			parent::OnAfterItemDelete($event);
+
+
+		}
+
+		/**
+		 * Removes this item and it's children (recursive) from structure dropdown
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemLoad(kEvent $event)
+		{
+			parent::OnAfterItemLoad($event);
+
+
+		}
+
+	}

Property changes on: releases/1.2.1-RC1/units/sections/categories/e_category_eh.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/categories/e_category_tp.php
===================================================================
--- releases/1.2.1-RC1/units/sections/categories/e_category_tp.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/categories/e_category_tp.php	(revision 15887)
@@ -0,0 +1,28 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends default CategoriesTagProcessor class
+	 *
+	 */
+	class ECategoryTagProcessor extends CategoriesTagProcessor {
+
+		/**
+		 * Adding custom processing to existing Field method
+		 *
+		 * @param Array $params
+		 * @return string
+		 */
+		function FormattedField($params)
+		{
+			// get from parent
+			$o = parent::Field($params);
+
+			// do some custom stuff here
+			$o = trim($o);
+
+			return $o;
+		}
+		
+	}

Property changes on: releases/1.2.1-RC1/units/sections/categories/e_category_tp.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/articles/e_article_eh.php
===================================================================
--- releases/1.2.1-RC1/units/sections/articles/e_article_eh.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/articles/e_article_eh.php	(revision 15887)
@@ -0,0 +1,214 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends default ArticlesEventHandler class
+	 *
+	 */
+	class EArticleEventHandler extends ArticlesEventHandler {
+
+		/**
+		 * Allows to override standard permission mapping
+		 *
+		 * @return void
+		 * @access protected
+		 * @see kEventHandler::$permMapping
+		 */
+		protected function mapPermissions()
+		{
+			parent::mapPermissions();
+
+			$permissions = Array (
+				'OnCustomEvent1' => Array ('self' => true),
+				'OnCustomEvent2' => Array ('self' => true),
+			);
+
+			$this->permMapping = array_merge($this->permMapping, $permissions);
+		}
+
+		/**
+		 * Checks user permission to execute given $event
+		 *
+		 * @param kEvent $event
+		 * @return bool
+		 * @access public
+		 */
+		public function CheckPermission(kEvent $event)
+		{
+			$skip_permissions_check_events = Array (
+				'OnAnotherCustomEvent',
+			);
+
+			if ( in_array($event->Name, $skip_permissions_check_events) ) {
+				return true;
+			}
+
+			return parent::CheckPermission($event);
+		}
+
+		/**
+		 * Occurs, when config was parsed, allows to change config data dynamically
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterConfigRead(kEvent $event)
+		{
+			parent::OnAfterConfigRead($event);
+
+			# 1. Regular Fields from /in-news/units/articles/articles_config.php
+			$fields = $this->Application->getUnitOption($event->Prefix, 'Fields'); #get regular fields
+//			$fields['Status']['default'] = STATUS_ACTIVE; #add/edit configuration (make default = STATUS_ACTIVE)
+			$this->Application->setUnitOption($event->Prefix, 'Fields', $fields); #save fields
+
+			# 2. Virtual Fields from /in-news/units/articles/articles_config.php
+			$virtual_fields = $this->Application->getUnitOption($event->Prefix, 'VirtualFields'); #get virtual fields
+//			$virtual_fields['UserName']['default'] = ''; #add/edit configuration
+			$this->Application->setUnitOption($event->Prefix, 'VirtualFields', $virtual_fields); #save virtual fields
+		}
+
+		/**
+		 * Filters out archived articles
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 * @see kDBEventHandler::OnListBuild()
+		 */
+		protected function SetCustomQuery(kEvent $event)
+		{
+			parent::SetCustomQuery($event);
+
+			$object = $event->getObject();
+			/* @var $object kDBList */
+
+			# identifying event based on special and setting filter
+			if ( $event->Special == 'custom-special' ) {
+//				$object->addFilter('primary_filter', '%1$s.Status = ' . STATUS_DISABLED);
+			}
+
+			# identifying event based not admin condition and setting filter
+			if ( !$this->Application->isAdminUser ) {
+//				$object->addFilter('status_filter', '%1$s.Status = ' . STATUS_ACTIVE);
+			}
+		}
+
+		/**
+		 * Create missing excerpt
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemCreate(kEvent $event)
+		{
+			parent::OnBeforeItemCreate($event);
+
+
+		}
+
+		/**
+		 * Create missing excerpt
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemUpdate(kEvent $event)
+		{
+			parent::OnBeforeItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs before deleting item, id of item being
+		 * deleted is stored as 'id' event param
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemDelete(kEvent $event)
+		{
+			parent::OnBeforeItemDelete($event);
+
+
+		}
+
+		/**
+		 * Occurs before loading item, 'id' parameter
+		 * allows to get id of item being loaded
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnBeforeItemLoad(kEvent $event)
+		{
+			parent::OnBeforeItemLoad($event);
+
+
+		}
+
+		/**
+		 * Sets values for import process
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemCreate(kEvent $event)
+		{
+			parent::OnAfterItemCreate($event);
+
+
+		}
+
+		/**
+		 * Occurs after updating item
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemUpdate(kEvent $event)
+		{
+			parent::OnAfterItemUpdate($event);
+
+
+		}
+
+		/**
+		 * Occurs after deleting item, id of deleted item
+		 * is stored as 'id' param of event
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemDelete(kEvent $event)
+		{
+			parent::OnAfterItemDelete($event);
+
+
+		}
+
+		/**
+		 * Occurs after loading item, 'id' parameter
+		 * allows to get id of item that was loaded
+		 *
+		 * @param kEvent $event
+		 * @return void
+		 * @access protected
+		 */
+		protected function OnAfterItemLoad(kEvent $event)
+		{
+			parent::OnAfterItemLoad($event);
+
+
+		}
+
+	}

Property changes on: releases/1.2.1-RC1/units/sections/articles/e_article_eh.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/articles/e_article_tp.php
===================================================================
--- releases/1.2.1-RC1/units/sections/articles/e_article_tp.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/articles/e_article_tp.php	(revision 15887)
@@ -0,0 +1,28 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Extends default ArticlesTagProcessor class
+	 *
+	 */
+	class EArticleTagProcessor extends ArticlesTagProcessor {
+
+		/**
+		 * Adding custom processing to existing Field method
+		 *
+		 * @param Array $params
+		 * @return string
+		 */
+		function FormattedField($params)
+		{
+			// get from parent
+			$o = parent::Field($params);
+
+			// do some custom stuff here
+			$o = trim($o);
+
+			return $o;
+		}
+		
+	}

Property changes on: releases/1.2.1-RC1/units/sections/articles/e_article_tp.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/reviews/e_review_eh.php
===================================================================
--- releases/1.2.1-RC1/units/sections/reviews/e_review_eh.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/reviews/e_review_eh.php	(revision 15887)
@@ -0,0 +1,148 @@
+<?php
+
+defined('FULL_PATH') or die('restricted access!');
+
+/**
+ * Extends/overrides methods of default ReviewsEventHandler class
+ *
+ */
+class EReviewEventHandler extends ReviewsEventHandler {
+
+	/**
+	 * Occurs, when config was parsed, allows to change config data dynamically
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterConfigRead(kEvent $event)
+	{
+		parent::OnAfterConfigRead($event);
+
+		// 1. add fields
+//			$fields = $this->Application->getUnitOption($event->Prefix, 'Fields');
+//			$this->Application->setUnitOption($event->Prefix, 'Fields', $fields);
+
+		// 2. calculated fields
+//			$calculated_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields');
+//			$this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calculated_fields);
+	}
+
+	/**
+	 * Prefills all fields on front-end
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnBeforeItemCreate(kEvent $event)
+	{
+		parent::OnBeforeItemCreate($event);
+
+
+	}
+
+	/**
+	 * Sets correct rating value
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnBeforeItemUpdate(kEvent $event)
+	{
+		parent::OnBeforeItemUpdate($event);
+
+
+	}
+
+	/**
+	 * Occurs before deleting item, id of item being
+	 * deleted is stored as 'id' event param
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnBeforeItemDelete(kEvent $event)
+	{
+		parent::OnBeforeItemDelete($event);
+
+
+	}
+
+	/**
+	 * Occurs before loading item, 'id' parameter
+	 * allows to get id of item being loaded
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnBeforeItemLoad(kEvent $event)
+	{
+		parent::OnBeforeItemLoad($event);
+
+
+	}
+
+
+	/**
+	 * Updates item review counter
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterItemCreate(kEvent $event)
+	{
+		parent::OnAfterItemCreate($event);
+
+
+	}
+
+	/**
+	 * Occurs after updating item
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterItemUpdate(kEvent $event)
+	{
+		parent::OnAfterItemUpdate($event);
+
+
+	}
+
+	/**
+	 * Occurs after deleting item, id of deleted item
+	 * is stored as 'id' param of event
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterItemDelete(kEvent $event)
+	{
+		parent::OnAfterItemDelete($event);
+
+
+	}
+
+	/**
+	 * Occurs after loading item, 'id' parameter
+	 * allows to get id of item that was loaded
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterItemLoad(kEvent $event)
+	{
+		parent::OnAfterItemLoad($event);
+
+
+	}
+
+}

Property changes on: releases/1.2.1-RC1/units/sections/reviews/e_review_eh.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/sections/custom_eh.php
===================================================================
--- releases/1.2.1-RC1/units/sections/custom_eh.php	(nonexistent)
+++ releases/1.2.1-RC1/units/sections/custom_eh.php	(revision 15887)
@@ -0,0 +1,36 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Custom event handler class
+	 *
+	 */
+	class CustomEventHandler extends kEventHandler {
+
+		/**
+		 * [HOOK] Override cloned sub-items (ie. register extended classes for clones from Reviews, Images)
+		 *
+		 * @param kEvent $event
+		 */
+		function OnOverrideClonedSubItems($event)
+		{
+			# register EReviewEventHandler class as extented from cloned ReviewEventHandler for article reviews ("n" prefix)
+//			$this->Application->registerClass('EReviewEventHandler', dirname(__FILE__) . '/reviews/e_review_eh.php', 'n-rev_EventHandler');
+		}
+
+		/**
+		 * [HOOK] Modify config stored in "categories_config.php" without extending CategoriesEventHandler class
+		 *
+		 * @param kEvent $event
+		 */
+		function OnModifyCategoriesConfig($event)
+		{
+			# get Fields configuration from /core/units/categories/categories_config.php
+			$fields = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'Fields');
+
+			# set configuration fields
+			$this->Application->setUnitOption($event->MasterEvent->Prefix, 'Fields', $fields);
+		}
+
+	}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/sections/custom_eh.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/widgets/widgets_config.php
===================================================================
--- releases/1.2.1-RC1/units/widgets/widgets_config.php	(nonexistent)
+++ releases/1.2.1-RC1/units/widgets/widgets_config.php	(revision 15887)
@@ -0,0 +1,219 @@
+<?php
+/**
+ * Sample config file for widgets
+ *
+ * @author dmitrya
+ * @package Development Kit
+ */
+
+defined('FULL_PATH') or die('restricted access!');
+
+$config = Array (
+
+	'Prefix' =>	'widget',
+
+	'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'),
+	'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
+
+	'EventHandlerClass'	=>	Array ('class' => 'WidgetEventHandler', 'file' => 'widget_eh.php', 'build_event' => 'OnBuild'),
+	'TagProcessorClass' =>	Array ('class' => 'WidgetTagProcessor', 'file' => 'widget_tp.php', 'build_event' => 'OnBuild'),
+
+	'AutoLoad' => true,
+
+	'QueryString' => Array (
+		1 => 'id',
+		2 => 'Page',
+		3 => 'PerPage',
+		4 => 'event',
+		5 => 'mode',
+	),
+
+	// in case, when one method does everything
+	'RewriteListener' => 'WidgetRewriteListener',
+
+	// in case, when building and parsing is done by separate methods
+//		'RewriteListener' => Array ('WidgetRewriteBuilder', 'WidgetRewriteParser'),
+
+	'IDField' => 'WidgetId',
+
+	'StatusField' => Array ('Status'),
+
+	'TableName'	=> TABLE_PREFIX.'Widgets',
+
+/*
+	'ForeignKey' =>	'ParentId', // field title in TableName, linking record to a parent
+	'ParentTableKey' =>	'ParentId', // id (or other key) field title in parent's table
+	'ParentPrefix' => 'parent',
+	'AutoDelete' => true, // delete these items when parent is being deleted
+	'AutoClone' => true, // clone these items when parent is being cloned
+*/
+
+	// used to build editing links in admin grids
+	'AdminTemplatePath' => 'widgets',
+	'AdminTemplatePrefix' => 'widget_',
+
+	'TitlePresets' => Array (
+		'default' => Array (
+			'new_status_labels' => Array ('widget' => '!la_title_AddingWidget!'),
+			'edit_status_labels' => Array ('widget' => '!la_title_EditingWidget!'),
+			'new_titlefield' => Array ('widget' => '!la_title_NewWidget!'),
+		),
+
+		'widget_list' => Array (
+			'prefixes' => Array ('widget_List'), 'format' => '#section_label#',
+			'toolbar_buttons' => Array ('new_item', 'edit', 'delete', 'approve', 'decline', 'export', 'import', 'view', 'dbl-click',),
+		),
+
+		'widget_edit' => Array (
+			'prefixes' => Array ('widget'), 'format' => '#widget_status# - #widget_titlefield#',
+			'toolbar_buttons' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'),
+		),
+	),
+
+	'PermSection' => Array ('main' => 'custom:widgets'),
+
+	'Sections' => Array (
+		'custom:widgets' => Array (
+			'parent' =>	'custom',
+			'icon' => 'custom',
+			'label' => 'la_tab_Widgets',
+			'url' => Array ('t' => 'custom/widgets/widget_list', 'pass' => 'm'),
+			'permissions' => Array ('view', 'add', 'edit', 'delete'),
+			'priority' => 1,
+			'type' => stTREE,
+		),
+	),
+
+	'TitleField' =>	'Title',	// field, used in bluebar when editing existing item
+
+	// Use %1$s for local table name with prefix, %2$s for calculated fields
+	'ListSQLs' => Array (	// key - special, value - list select sql
+		'' => 'SELECT %1$s.* %2$s
+					 FROM %1$s',
+	),
+
+	'ItemSQLs' => Array (
+		'' => 'SELECT %1$s.* %2$s
+					 FROM %1$s',
+	),
+
+	'ListSortings'	=> 	Array (
+		'' => Array (
+//			'ForcedSorting' => Array ('Priority' => 'desc'),
+			'Sorting' => Array ('Title' => 'asc'),
+		)
+	),
+
+	'VirtualFields' =>	Array (
+		'VirtualActionField' => Array ('type' => 'string', 'default' => ''),
+	),
+
+	'Fields' =>	Array (
+		'WidgetId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
+		'Title' => Array (
+			'type' => 'string', 'max_len' => 255,
+			'required' => 1, 'default' => '', 'not_null' => 1,
+		),
+		'Description' => Array (
+			'type' => 'string',
+			'formatter' => 'kFormatter', 'using_fck' => 1,
+			'default' => null,
+		),
+		'Email' => Array (
+			'type' => 'string', 'formatter' => 'kFormatter',
+			'regexp' => '/^(' . REGEX_EMAIL_USER . '@' . REGEX_EMAIL_DOMAIN . ')$/i',
+			'sample_value' => 'email@domain.com',
+			'not_null' => 1, 'default' => '',
+			'error_msgs' => Array ('invalid_format' => '!la_invalid_email!'),
+		),
+		'Type' => Array (
+			'type' => 'int',
+			'formatter' => 'kOptionsFormatter', 'use_phrases' => 1,
+			'options' => Array (
+				1 => 'la_opt_Default',
+				2 => 'la_opt_Custom',
+			),
+			'not_null' => 1,
+			'default' => 1,
+			'required' => 1,
+		),
+		'Phone' => Array (
+			'type' => 'string',
+			'formatter' => 'kFormatter',
+			'default' => '', 'using_fck' => 1, 'not_null' => 1),
+		'Qty' => Array (
+			'type' => 'double',
+			'required' => 0, 'not_null' => 1, 'default' => 0
+		),
+		'Status' =>	Array (
+			'type' => 'int', 'formatter' => 'kOptionsFormatter',
+			'options' => array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'),
+			'use_phrases' => 1, 'not_null' => 1, 'default' => 2,
+		),
+		'CreatedOn' => Array (
+			'type' => 'int',
+			'formatter' => 'kDateFormatter',
+			'time_format' => '', 'input_time_format' => '',
+			'default' => '#NOW#',
+		),
+		'Good' => Array (
+			'type' => 'int', 'formatter' => 'kOptionsFormatter',
+			'options' => Array (1 => 'la_Yes', 0 => 'la_No'),
+			'use_phrases' => 1, 'not_null' => 1, 'default' => 0
+		),
+		'BirthTime' => Array (
+			'type' => 'int', 'formatter' => 'kDateFormatter',
+			'date_format' => '', 'input_date_format' => '',
+			'default' => null
+		),
+		'Image' => Array (
+			'type' => 'string', 'formatter' => 'kUploadFormatter',
+			'max_size' => MAX_UPLOAD_SIZE, // in Bytes !
+			'file_types' => '*.jpg;*.jpeg;*.gif;*.png;*.bmp', 'files_description' => '!la_hint_ImageFiles!',
+			'upload_dir' => '/system/user_files/', // relative to project's home
+			'as_image' => true, 'thumb_format' => 'resize:100x100',
+			'multiple' => false, // false or max number of files - will be stored as serialized array of paths
+			'direct_links' => false, // use direct file urls or send files through wrapper (requires mod_mime_magic)
+			'filename_prefix' => '',
+			'filename_suffix' => '',
+			'storage_engine' => StorageEngine::HASH,
+			'required' => 1, 'default' => null
+		),
+		'DataFile' => Array (
+			'type' => 'string', 'formatter' => 'kUploadFormatter',
+			'max_size' => MAX_UPLOAD_SIZE, // in Bytes !
+			'file_types' => '*.*',
+			'files_description' => '!la_hint_AllFiles!',
+			'upload_dir' => '/system/user_files/', // relative to project's home
+			'as_image' => false,
+			'multiple' => 5, // false or max number of files - will be stored as serialized array of paths
+			'direct_links' => true, // use direct file urls or send files through wrapper (requires mod_mime_magic)
+			'default' => null
+		),
+	),
+
+	'Grids'	=> Array (
+		'Default' => Array (
+//			'Icons' => Array ('default' => 'icon16_custom.gif'),
+			'Fields' => Array (
+				'WidgetId' => Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter'),
+				'Title' => Array ('title' => 'column:la_fld_Name', 'data_block' => 'grid_custom_td'),
+				'Image' => Array ('data_block' => 'grid_image_td', 'filter_block' => 'grid_empty_filter', 'width' => 120),
+				'Type' => Array ('filter_block' => 'grid_options_filter'),
+				'Status' => Array ('filter_block' => 'grid_options_filter'),
+				'Good' => Array ('filter_block' => 'grid_like_filter'),
+				'Qty' => Array ('header_block' => 'grid_column_title_no_sorting', 'filter_block' => 'grid_range_filter'),
+				'Email' => Array ('filter_block' => 'grid_like_filter'),
+				'Phone' => Array ('filter_block' => 'grid_like_filter'),
+				'CreatedOn' => Array ('filter_block' => 'grid_date_range_filter'),
+				'Description' => Array ('filter_block' => 'grid_like_filter'),
+				'VirtualActionField' => Array ('title' => 'column:la_fld_Action', 'data_block' => 'grid_delete_td'),
+			),
+		),
+	),
+
+	/*'ConfigMapping' => Array (
+		'PerPage' => 'Perpage_Widgets',
+		'ShortListPerPage' => 'Perpage_Widgets_Short',
+	),*/
+);
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/widgets/widgets_config.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/widgets/widget_eh.php
===================================================================
--- releases/1.2.1-RC1/units/widgets/widget_eh.php	(nonexistent)
+++ releases/1.2.1-RC1/units/widgets/widget_eh.php	(revision 15887)
@@ -0,0 +1,319 @@
+<?php
+defined('FULL_PATH') or die('restricted access!');
+
+/**
+ * Widgets Event Handler (sample)
+ *
+ */
+class WidgetEventHandler extends kDBEventHandler {
+
+	/**
+	 * Allows to override standard permission mapping
+	 *
+	 * @return void
+	 * @access protected
+	 * @see kEventHandler::$permMapping
+	 */
+	protected function mapPermissions()
+	{
+		parent::mapPermissions();
+
+		$permissions = Array (
+			'OnItemBuild' => Array ('self' => true),
+			'OnCustomEvent' => Array ('self' => true),
+		);
+
+		$this->permMapping = array_merge($this->permMapping, $permissions);
+	}
+
+	/**
+	 * Checks user permission to execute given $event
+	 *
+	 * @param kEvent $event
+	 * @return bool
+	 * @access public
+	 */
+	public function CheckPermission(kEvent $event)
+	{
+		$skip_permissions_check_events = Array (
+			'OnAnotherCustomEvent',
+		);
+
+		if ( in_array($event->Name, $skip_permissions_check_events) ) {
+			return true;
+		}
+
+		return parent::CheckPermission($event);
+	}
+
+	/**
+	 * Set custom query for the list
+	 *
+	 * @param kEvent $event
+	 */
+	function OnCustomEvent($event)
+	{
+		$object = $event->getObject();
+		/* @var $object kDBList */
+
+	}
+
+	/**
+	 * Apply any custom changes to list's sql query
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 * @see kDBEventHandler::OnListBuild()
+	 */
+	protected function SetCustomQuery(kEvent $event)
+	{
+		parent::SetCustomQuery($event);
+
+		$object = $event->getObject();
+		/* @var $object kDBList */
+
+		# identifying event based on special and setting filter
+		if ( $event->Special == 'custom-special' ) {
+//				$object->addFilter('primary_filter', '%1$s.Status = ' . STATUS_DISABLED);
+		}
+	}
+
+	/**
+	 * Occurs before creating item
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnBeforeItemCreate(kEvent $event)
+	{
+		parent::OnBeforeItemCreate($event);
+
+	}
+
+	/**
+	 * Occurs before updating item
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnBeforeItemUpdate(kEvent $event)
+	{
+		parent::OnBeforeItemUpdate($event);
+
+	}
+
+	/**
+	 * Occurs before deleting item, id of item being
+	 * deleted is stored as 'id' event param
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnBeforeItemDelete(kEvent $event)
+	{
+		parent::OnBeforeItemDelete($event);
+
+
+	}
+
+	/**
+	 * Occurs before loading item, 'id' parameter
+	 * allows to get id of item being loaded
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnBeforeItemLoad(kEvent $event)
+	{
+		parent::OnBeforeItemLoad($event);
+
+
+	}
+
+
+	/**
+	 * Occurs after creating item
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterItemCreate(kEvent $event)
+	{
+		parent::OnAfterItemCreate($event);
+
+
+	}
+
+	/**
+	 * Occurs after updating item
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterItemUpdate(kEvent $event)
+	{
+		parent::OnAfterItemUpdate($event);
+
+
+	}
+
+	/**
+	 * Occurs after deleting item, id of deleted item
+	 * is stored as 'id' param of event
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterItemDelete(kEvent $event)
+	{
+		parent::OnAfterItemDelete($event);
+
+
+	}
+
+	/**
+	 * Loads user images
+	 *
+	 * @param kEvent $event
+	 * @return void
+	 * @access protected
+	 */
+	protected function OnAfterItemLoad(kEvent $event)
+	{
+		parent::OnAfterItemLoad($event);
+
+
+	}
+
+	/**
+	 * Builds/parses widget part of url
+	 *
+	 * @param int $rewrite_mode Mode in what rewrite listener was called. Possbile two modes: REWRITE_MODE_BUILD, REWRITE_MODE_PARSE.
+	 * @param string $prefix Prefix, that listener uses for system integration
+	 * @param Array $params Params, that are used for url building or created during url parsing.
+	 * @param Array $url_parts Url parts to parse (only for parsing).
+	 * @param bool $keep_events Keep event names in resulting url (only for building).
+	 * @return bool Return true to continue to next listener; return false (when building) not to rewrite given prefix; return false (when parsing) to stop processing at this listener.
+	 */
+	function WidgetRewriteListener($rewrite_mode = REWRITE_MODE_BUILD, $prefix, &$params, &$url_parts, $keep_events = false)
+	{
+		if ($rewrite_mode == REWRITE_MODE_BUILD) {
+			return $this->WidgetRewriteBuilder($rewrite_mode, $prefix, $params, $url_parts, $keep_events);
+		}
+
+		if ($rewrite_mode == REWRITE_MODE_PARSE) {
+			return $this->WidgetRewriteParser($rewrite_mode, $prefix, $params, $url_parts);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Builds/parses widget part of url
+	 *
+	 * @param int $rewrite_mode Mode in what rewrite listener was called. Possbile two modes: REWRITE_MODE_BUILD, REWRITE_MODE_PARSE.
+	 * @param string $prefix Prefix, that listener uses for system integration
+	 * @param Array $params Params, that are used for url building or created during url parsing.
+	 * @param Array $url_parts Url parts to parse (only for parsing).
+	 * @param bool $keep_events Keep event names in resulting url (only for building).
+	 * @return bool Return true to continue to next listener; return false (when building) not to rewrite given prefix; return false (when parsing) to stop processing at this listener.
+	 */
+	function WidgetRewriteBuilder($rewrite_mode = REWRITE_MODE_BUILD, $prefix, &$params, &$url_parts, $keep_events = false)
+	{
+		$template = $this->Application->getPhysicalTemplate($params['t']);
+
+		if ( $template == 'widgets/widget_detail' ) {
+			// this is default template for this prefix, so don't add it to resulting url
+			$params['pass_template'] = false;
+		}
+
+		$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
+		/* @var $rewrite_processor kRewriteUrlProcessor */
+
+		$processed_params = $rewrite_processor->getProcessedParams($prefix, $params, $keep_events);
+
+		if ( $processed_params === false ) {
+			return '';
+		}
+
+		$ret = Array ('', '');
+
+		$filename = isset($params[$prefix . '_filename']) ? $params[$prefix . '_filename'] : $this->Application->GetVar($prefix . '_filename');
+		unset($params[$prefix . '_filename']);
+
+		if ( $processed_params[$prefix . '_id'] > 0 ) {
+			// add id
+			if ( !$filename ) {
+				$sql = 'SELECT Title
+						FROM ' . TABLE_PREFIX . 'Widgets
+						WHERE WidgetId = ' . $processed_params[$prefix . '_id'];
+				$filename = $this->Conn->GetOne($sql);
+			}
+
+			$ret[0] .= 'widgets/' . $filename . '/';
+		}
+		elseif ( $processed_params[$prefix . '_Page'] > 1 ) {
+			// add page, only when ID is missing
+			$ret[1] .= $processed_params[$prefix . '_Page'] . '/';
+		}
+
+		$ret[0] = rtrim($ret[0], '/');
+		$ret[1] = rtrim($ret[1], '/');
+
+		return array_map('mb_strtolower', $ret);
+	}
+
+	/**
+	 * Builds/parses widget part of url
+	 *
+	 * @param int $rewrite_mode Mode in what rewrite listener was called. Possbile two modes: REWRITE_MODE_BUILD, REWRITE_MODE_PARSE.
+	 * @param string $prefix Prefix, that listener uses for system integration
+	 * @param Array $params Params, that are used for url building or created during url parsing.
+	 * @param Array $url_parts Url parts to parse (only for parsing).
+	 * @return bool Return true to continue to next listener; return false (when building) not to rewrite given prefix; return false (when parsing) to stop processing at this listener.
+	 */
+	function WidgetRewriteParser($rewrite_mode = REWRITE_MODE_BUILD, $prefix, &$params, &$url_parts)
+	{
+		$widget_id = 0;
+		$widget_filename = '';
+		$widget_index = array_search('widgets', $url_parts);
+
+		if ( $widget_index !== false && isset($url_parts[$widget_index + 1]) ) {
+			$widget_filename = $url_parts[$widget_index + 1];
+		}
+
+		$rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor');
+		/* @var $rewrite_processor kRewriteUrlProcessor */
+
+		if ( $widget_filename ) {
+			$sql = 'SELECT WidgetId
+					FROM ' . TABLE_PREFIX . 'Widgets
+					WHERE Title = ' . $this->Conn->qstr($widget_filename);
+			$widget_id = $this->Conn->GetOne($sql);
+
+			if ( $widget_id ) {
+				$params[$this->Prefix . '_id'] = $widget_id;
+				$params[$this->Prefix . '_filename'] = $widget_filename;
+				$params['pass'][] = $this->Prefix;
+
+				$rewrite_processor->partParsed('widgets');
+				$rewrite_processor->partParsed($widget_filename);
+			}
+		}
+
+		if ( $widget_id && !$rewrite_processor->moreToParse() ) {
+			// widget was last url part - use default template
+			$params['t'] = 'widgets/widget_detail';
+		}
+
+		return true;
+	}
+}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/widgets/widget_eh.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/widgets/widget_tp.php
===================================================================
--- releases/1.2.1-RC1/units/widgets/widget_tp.php	(nonexistent)
+++ releases/1.2.1-RC1/units/widgets/widget_tp.php	(revision 15887)
@@ -0,0 +1,66 @@
+<?php
+defined('FULL_PATH') or die('restricted access!');
+
+/**
+ * Widgets Tag Processor (sample)
+ *
+ */
+class WidgetTagProcessor extends kDBTagProcessor {
+
+	/**
+	 * Custom tag to output "Hello World!"
+	 *
+	 * @param Array $params
+	 * @return string
+	 */
+	function NewTag($params)
+	{
+		return 'Hello world!';
+	}
+
+	/**
+	 * Returns a link for editing product
+	 *
+	 * @param Array $params
+	 * @return string
+	 */
+	function ItemEditLink($params)
+	{
+		$object = $this->getObject($params);
+		/* @var $object kDBList */
+
+		$edit_template = $this->Application->getUnitOption($this->Prefix, 'AdminTemplatePath') . '/' . $this->Application->getUnitOption($this->Prefix, 'AdminTemplatePrefix') . 'edit';
+
+		$url_params = Array (
+			'm_opener'				=>	'd',
+			$this->Prefix.'_mode'	=>	't',
+			$this->Prefix.'_event'	=>	'OnEdit',
+			$this->Prefix.'_id'		=>	$object->GetID(),
+			'pass'					=>	'all,'.$this->Prefix,
+			'no_pass_through'		=>	1,
+		);
+
+		return $this->Application->HREF($edit_template, '', $url_params);
+	}
+
+
+	/**
+	 * Creates link to an item including only it's id
+	 *
+	 * @param Array $params
+	 * @return string
+	 * @access protected
+	 */
+	protected function ItemLink($params)
+	{
+		$object = $this->getObject($params);
+		/* @var $object kDBItem */
+
+		$params['pass'] = 'm,' . $this->Prefix;
+		$params[$object->Prefix . '_id'] = $object->GetID();
+		$params[$object->Prefix . '_filename'] = $object->GetDBField('Title');
+
+		return $this->Application->ProcessParsedTag('m', 'Link', $params);
+	}
+
+}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/widgets/widget_tp.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/helpers/helpers_config.php
===================================================================
--- releases/1.2.1-RC1/units/helpers/helpers_config.php	(nonexistent)
+++ releases/1.2.1-RC1/units/helpers/helpers_config.php	(revision 15887)
@@ -0,0 +1,14 @@
+<?php
+
+defined('FULL_PATH') or die('restricted access!');
+
+	$config = Array (
+
+		'Prefix' => 'custom-helpers',
+
+		'EventHandlerClass'	=> Array ('class' => 'kEventHandler', 'file' => '', 'build_event' => 'OnBuild'),
+
+		'RegisterClasses' => Array (
+			Array ('pseudo' => 'SampleHelper', 'class' => 'SampleHelper', 'file' => 'sample_helper.php', 'build_event' => ''),
+		),
+	);
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/helpers/helpers_config.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/helpers/sample_helper.php
===================================================================
--- releases/1.2.1-RC1/units/helpers/sample_helper.php	(nonexistent)
+++ releases/1.2.1-RC1/units/helpers/sample_helper.php	(revision 15887)
@@ -0,0 +1,14 @@
+<?php
+
+	defined('FULL_PATH') or die('restricted access!');
+
+	/**
+	 * Sample helper contains methods used in different classes
+	 *
+	 */
+	class SampleHelper extends kHelper
+	{
+
+
+
+	}
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/helpers/sample_helper.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: releases/1.2.1-RC1/units/.htaccess
===================================================================
--- releases/1.2.1-RC1/units/.htaccess	(nonexistent)
+++ releases/1.2.1-RC1/units/.htaccess	(revision 15887)
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file

Property changes on: releases/1.2.1-RC1/units/.htaccess
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1/README
===================================================================
--- releases/1.2.1-RC1/README	(nonexistent)
+++ releases/1.2.1-RC1/README	(revision 15887)
@@ -0,0 +1,179 @@
+INTRODUCTION TO IN-PORTAL
+-------------------------
+
+In-Portal is Open Source object-oriented framework that is developed
+in PHP and provides quick and easy way to build websites and web applications.
+
+In-Portal Framework has modular structure that allows painlessly
+add and extend already existing features via new modules.
+
+In-Portal Community greatly appreciates any type of involvement
+and contributions to the project.
+
+Please visit
+
+	http://www.in-portal.org/contribute.html
+
+to see how You can participate and be a part of In-Portal Community.
+
+
+THIS DEVELOPMENT KIT
+--------------------
+
+This README file provides you with the basic understanding and content
+of provided Development Kit.
+
+Latest version of this Development Kit can be downloaded here
+
+	http://www.in-portal.org
+
+	http://source.in-portal.org/custom/tags
+
+This Development Kit is implemented and called "Custom" so it can be used
+by developers as HOWTO create new modules as well as extend existing
+modules not worrying about upgrading issues in the future.
+
+This module contains samples of the most basic and widely used features
+of In-Portal. While the code might look very simple, though it provides
+a quick and effective way to unlock most powerful capabilities for
+In-Portal customization on many levels.
+
+
+FOLDER STRUCTURE
+----------------
+
+1. All In-Portal modules have the same folder structure, that provides a quick
+access to each aspect of it's functionality. Top folder is the module name
+in a LOWERCASE. It is "custom" for "Custom" module, "in-link" for "In-Link"
+module and so on.
+
+2. Inside there are three (3) main folders:
+
+		* admin_templates/ - templates and resources (images, javascript, etc.),
+		these are used Admin ONLY.
+
+		* units/ - business logic of the module, used on both Front-end and Admin.
+
+		* install/ - contains files used to install the module into existing
+		In-Portal installation.
+
+
+2.1. Content of "admin_templates/" folder.
+
+This folder contains one (1) sub-folder for each Section in Admin console's
+main navigation menu (in left frame). Each such folder should ONLY contain
+templates ("*.tpl" files) used for displaying given Section in the main
+navigation menu in Admin console.
+
+Besides that there are one special purpose folder called "img/".
+This folder contains all kind of images divided by categories (usage).
+Images from each category (usage) are located in special sub-folder
+associated with the given image category.
+
+There are three (3) main folders
+
+	* "icons/" - images, that will be used as Section icons in the
+	main navigation menu next to the actual titles;
+	NOTE one image per one menu Section, but the same image could be used
+	for multiple menu Section.
+
+	* "itemicons/" - images, that will be shown on the left from each
+	row in grid of records (also called list).
+
+	* "toolbar/" - images, that are used to draw buttons on toolbar
+	on module templates that uses toolbar-based interface ONY.
+
+	NOTE that it is not restricted to create any other folders
+	and place images inside them or in the "img/" folder itself.
+
+	NOTE it is also common practice to create a "js/" sub-folder
+	and place all javascript scripts related to the Admin console inside.
+
+
+2.2. Content of "units/" folder
+
+This folder can contain unlimited number of sub-folders.
+
+Each sub-folder should contain "*.php" files with the business logic
+implementation for the given functionality.
+
+Usually there are three (3) files
+
+	- Unit Config - main file, that allows to connect a given Unit into the framework;
+
+	- Event Handler - all code, that will manipulate with the data is located here;
+
+	- Tag Processor - all code, that is used to output the data to a user
+	in any requested form is located here.
+
+	It is NOT permitted to create files in "units/" folder itself, only sub-folder
+	as described above.
+
+	HOWEVER it is not prohibited to place a group of "unit" type folders inside
+	other "unit" type folders to logically divide them into groups.
+	Example, "units/logs/visits/" and "units/logs/summary/" both located inside
+	of "units/logs" folder, but each has it's own Unit Config, Event Handler, Tag Proccesor.
+
+
+2.3. Content of "install/" folder.
+
+This folder contains files used to during the installation which will automaticall install
+
+	* install Language Phrases
+	* install Email Events
+	* apply Database changes (e.g. new tables)
+
+associated with given module.
+
+There are also "upgrades.sql" (required) and "upgades.php" (not required). These files
+allow to maintain module version based on database structure control.
+
+
+3. BASIC UNDERSTANDING AND USAGE
+--------------------------------
+
+Visual part of Admin console consists of tree (3) parts
+
+	* Top - contains website logo, logout link and some other things.
+
+	* Left - contains main navigation menu (list of Sections) and used to control all functionality.
+
+	* Right - main part that show the actual Section and data.
+
+
+3.1 Adding a new Section item
+
+As we know left part of Admin console contains main navigation menu
+so it's crucial to learn add a new Sections.
+
+New menu Sections are added using Unit Config files (desribed above).
+Each unit can have unlimited number of menu Sections (and Sub-Sections)
+at any place inside the main navigation menu.
+
+To add a new section you need to add it to 'Sections' array descrived in Unit Config file
+of corresponding/related Unit, for example open "custom/units/widgets/widgets_config.php"
+
+	'Sections' => Array (
+		'custom' => Array (
+			'parent'		=>	'in-portal:root',
+			'icon'			=>	'custom',
+			'label'			=>	'la_title_SampleMenuItem',
+			'url'			=>	Array ('t' => 'custom/widgets/widget_list', 'pass' => 'm'),
+			'permissions'	=>	Array ('view', 'add', 'edit', 'delete'),
+			'priority'		=>	1,
+			'type'			=>	stTREE,
+		),
+	),
+
+
+4. WHAT'S NEXT
+--------------
+
+While we can write thousands of lines in this file we decided
+to put all our knowledge base online using old good Wiki.
+
+Please feel free to read, ask questions and participate in In-Portal Community!
+
+	http://guide.in-portal.org/eng/index.php
+
+	http://www.in-portal.org/contribute.html

Property changes on: releases/1.2.1-RC1/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: releases/1.2.1-RC1
===================================================================
--- releases/1.2.1-RC1	(nonexistent)
+++ releases/1.2.1-RC1	(revision 15887)

Property changes on: releases/1.2.1-RC1
___________________________________________________________________
Added: bugtraq:logregex
## -0,0 +1,2 ##
+(?:[Bb]ugs?|[Ii]ssues?|[Rr]eports?|[Ff]ixe?s?|[Rr]esolves?)+\s+(?:#?(?:\d+)[,\.\s]*)+
+(\d+)
\ No newline at end of property
Added: bugtraq:url
## -0,0 +1 ##
+http://tracker.in-portal.org/view.php?id=%BUGID%
\ No newline at end of property
Added: bugtraq:warnifnoissue
## -0,0 +1 ##
+false
\ No newline at end of property
Added: svn:ignore
## -0,0 +1,2 ##
+config.php*
+debug.php
Added: svn:mergeinfo
## -0,0 +0,11 ##
   Merged /modules/custom/releases/1.1.1:r14078-14085
   Merged /modules/custom/releases/1.0.2:r13085-13092
   Merged /modules/custom/releases/1.1.2:r14314-14561
   Merged /modules/custom/releases/1.0.3:r13512-13545
   Merged /modules/custom/releases/1.1.3:r14554-14578
   Merged /custom/releases/1.0.1:r12623-12650
   Merged /modules/custom/branches/1.0.x:r12743-13732
   Merged /modules/custom/branches/1.1.x:r13849-14553
   Merged /modules/custom/releases/1.0.4:r13733-13741
   Merged /custom/branches/1.0.x:r12144-12742
   Merged /custom/branches/RC:r12143
Added: tsvn:autoprops
## -0,0 +1,19 ##
+*.php = svn:eol-style=LF;svn:keywords=Id
+*.tpl = svn:eol-style=LF
+*.sql = svn:eol-style=LF
+*.lang = svn:eol-style=LF
+*.sh = svn:eol-style=LF;svn:executable
+*.txt = svn:eol-style=LF
+*.html = svn:eol-style=LF
+*.htm = svn:eol-style=LF
+*.css = svn:eol-style=LF
+*.js = svn:eol-style=LF
+*.xml = svn:eol-style=LF
+.htaccess = svn:eol-style=LF
+.smsignore = svn:eol-style=LF
+COPYRIGHT = svn:eol-style=LF
+CREDITS = svn:eol-style=LF
+INSTALL = svn:eol-style=LF
+LICENSE = svn:eol-style=LF
+LICENSES = svn:eol-style=LF
+README = svn:eol-style=LF
\ No newline at end of property