Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Wed, Jul 23, 12:23 PM

in-portal

Index: branches/RC/kernel/units/related_searches/related_searches_tag_processor.php
===================================================================
--- branches/RC/kernel/units/related_searches/related_searches_tag_processor.php (revision 9333)
+++ branches/RC/kernel/units/related_searches/related_searches_tag_processor.php (revision 9334)
@@ -1,22 +1,20 @@
<?php
class RelatedSearchTagProcessor extends kDBTagProcessor {
-
/**
* Returns url for search on the Fornt End
*
* @param Array $params
* @return string
*/
function RelatedSearchUrl($params)
{
$object =& $this->getObject($params);
$keyword = $object->GetDBField('Keyword');
- return $this->Application->HREF($params['search_template'],'', Array(
- 'keywords' => $keyword,));
+ return $this->Application->HREF($params['search_template'],'', Array('keywords' => $keyword));
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/kernel/units/related_searches/related_searches_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1.2.1
\ No newline at end of property
+1.1.2.2
\ No newline at end of property
Index: branches/RC/kernel/admin_templates/categories/categories_edit_related_searches.tpl
===================================================================
--- branches/RC/kernel/admin_templates/categories/categories_edit_related_searches.tpl (revision 9333)
+++ branches/RC/kernel/admin_templates/categories/categories_edit_related_searches.tpl (revision 9334)
@@ -1,115 +1,115 @@
<inp2:m_RequireLogin permissions="CATEGORY.VIEW"/>
<inp2:m_include t="incs/header" nobody="yes"/>
<body topmargin="0" leftmargin="8" marginheight="0" marginwidth="8" bgcolor="#FFFFFF">
<inp2:m_RenderElement name="section_header" prefix="c" icon="icon46_catalog" module="in-portal" title="!la_title_Categories!"/>
<inp2:m_include t="in-portal/categories/categories_tabs"/>
<inp2:m_RenderElement name="blue_bar" prefix="c" title_preset="categories_related_searches" module="in-portal" icon="icon46_catalog"/>
<!-- 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('c','<inp2:c_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('c','OnCancelEdit');
}
) );
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('c', '<inp2:c_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('c', '<inp2:c_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
//Relations related:
- a_toolbar.AddButton( new ToolBarButton('new_related_search', '<inp2:m_phrase label="la_ToolTip_New_Keyword" escape="1"/>',
+ a_toolbar.AddButton( new ToolBarButton('in-portal:new_related_search', '<inp2:m_phrase label="la_ToolTip_New_Keyword" escape="1"/>',
function() {
std_new_item('c-search', 'in-portal/categories/related_searches_edit')
} ) );
function edit()
{
std_edit_temp_item('c-search', 'in-portal/categories/related_searches_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('c-search')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('c-search','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('c-search','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep4') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
<inp2:m_if check="c_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="c_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="c_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="grid_keyword_td" >
<td valign="top" class="text">
<input type="checkbox" name="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>" id="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>">
<img src="<inp2:ModulePath module="In-Portal"/>img/itemicons/<inp2:{$PrefixSpecial}_ItemIcon grid="$grid"/>">
<inp2:Field field="$field" grid="$grid"/><span class="priority"><inp2:m_if check="{$PrefixSpecial}_fieldequals" field="Priority" value="0"><inp2:m_else/><sup><inp2:{$PrefixSpecial}_field field="Priority" /></sup></inp2:m_if></span>
</td>
</inp2:m_DefineElement>
<inp2:m_RenderElement name="grid" PrefixSpecial="c-search" IdField="RelatedSearchId" grid="Default" menu_filters="yes"/>
<script type="text/javascript">
Grids['c-search'].SetDependantToolbarButtons( new Array('edit','delete','approve','decline') );
</script>
<input type="hidden" name="RelatedSearchId" id="RelatedSearchId" value="<inp2:m_get name="RelatedSearchId"/>">
<inp2:m_include t="incs/footer"/>
<script type="text/javascript">
var $env = document.getElementById('sid').value+'-:m<inp2:m_get name="m_cat_id"/>-1-1-1-s';
</script>
\ No newline at end of file
Property changes on: branches/RC/kernel/admin_templates/categories/categories_edit_related_searches.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1.2.1
\ No newline at end of property
+1.1.2.2
\ No newline at end of property
Index: branches/RC/kernel/admin_templates/img/toolbar/tool_new_related_search_f2.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/RC/kernel/admin_templates/img/toolbar/tool_new_related_search_f2.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: branches/RC/kernel/admin_templates/img/toolbar/tool_new_related_search.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/RC/kernel/admin_templates/img/toolbar/tool_new_related_search.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: branches/RC/themes/default2007/platform/elements/side_boxes/related_searches.tpl
===================================================================
--- branches/RC/themes/default2007/platform/elements/side_boxes/related_searches.tpl (revision 9333)
+++ branches/RC/themes/default2007/platform/elements/side_boxes/related_searches.tpl (revision 9334)
@@ -1,13 +1,15 @@
<inp2:m_Capture to_var="header">
<inp2:m_phrase name="lu_title_RelatedSearches"/>
</inp2:m_Capture>
<inp2:m_DefineElement name="related_search_element">
-<tr><td>
-<a href="<inp2:RelatedSearchUrl search_template="platform/search/search_results"/>"><inp2:Field name="Keyword"/></a>
-</td></tr>
+ <tr>
+ <td>
+ <a href="<inp2:RelatedSearchUrl search_template="platform/search/search_results"/>"><inp2:Field name="Keyword"/></a>
+ </td>
+ </tr>
</inp2:m_DefineElement>
<table>
-<inp2:c-search_PrintList render_as="related_search_element"/>
+ <inp2:c-search_PrintList render_as="related_search_element"/>
</table>
\ No newline at end of file
Property changes on: branches/RC/themes/default2007/platform/elements/side_boxes/related_searches.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1.2.2
\ No newline at end of property
+1.1.2.3
\ No newline at end of property
Index: branches/RC/core/kernel/utility/formatters/options_formatter.php
===================================================================
--- branches/RC/core/kernel/utility/formatters/options_formatter.php (revision 9333)
+++ branches/RC/core/kernel/utility/formatters/options_formatter.php (revision 9334)
@@ -1,46 +1,48 @@
<?php
class kOptionsFormatter extends kFormatter {
function Format($value, $field_name, &$object, $format=null)
{
if ( is_null($value) ) return '';
$options = $object->GetFieldOptions($field_name);
$label = getArrayValue($options['options'], $value);
if ($label !== false) {
+ // option_id found in options array
if (getArrayValue($options, 'use_phrases')) {
return $this->Application->Phrase($label);
}
else {
return $label;
}
}
else {
- return $value;
+ // option_id not found
+ return $value == 0 ? '' : $value;
}
}
function Parse($value, $field_name, &$object)
{
if ($value == '') return NULL;
$options = $object->GetFieldOptions($field_name);
$use_phrases = getArrayValue($options, 'use_phrases');
$found = false;
foreach ($options['options'] as $option_key => $option_value) {
if ($use_phrases) {
$option_value = $this->Application->Phrase($option_value);
}
if ($option_value == $value) {
$found = true;
break;
}
}
return $found ? $option_key : $value;
}
}
\ No newline at end of file
Property changes on: branches/RC/core/kernel/utility/formatters/options_formatter.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1
\ No newline at end of property
+1.1.32.1
\ No newline at end of property
Index: branches/RC/core/kernel/db/dbitem.php
===================================================================
--- branches/RC/core/kernel/db/dbitem.php (revision 9333)
+++ branches/RC/core/kernel/db/dbitem.php (revision 9334)
@@ -1,1046 +1,1048 @@
<?php
/**
* DBItem
*
* Desciption
* @package kernel4
*/
class kDBItem extends kDBBase {
/**
* Description
*
* @var array Associative array of current item' field values
* @access public
*/
var $FieldValues;
/**
* Unformatted field values, before parse
*
* @var Array
* @access private
*/
var $DirtyFieldValues = Array();
/**
* Holds item values after loading (not affected by submit)
*
* @var Array
* @access private
*/
var $OriginalFieldValues = Array ();
var $FieldErrors;
var $ErrorMsgs = Array();
/**
* If set to true, Update will skip Validation before running
*
* @var array Associative array of current item' field values
* @access public
*/
var $IgnoreValidation = false;
var $Loaded = false;
/**
* Holds item' primary key value
*
* @var int Value of primary key field for current item
* @access public
*/
var $ID;
function kDBItem()
{
parent::kDBBase();
$this->ErrorMsgs['required'] = '!la_err_required!'; //'Field is required';
$this->ErrorMsgs['unique'] = '!la_err_unique!'; //'Field value must be unique';
$this->ErrorMsgs['value_out_of_range'] = '!la_err_value_out_of_range!'; //'Field is out of range, possible values from %s to %s';
$this->ErrorMsgs['length_out_of_range'] = '!la_err_length_out_of_range!'; //'Field is out of range';
$this->ErrorMsgs['bad_type'] = '!la_err_bad_type!'; //'Incorrect data format, please use %s';
$this->ErrorMsgs['invalid_format'] = '!la_err_invalid_format!'; //'Incorrect data format, please use %s';
$this->ErrorMsgs['bad_date_format'] = '!la_err_bad_date_format!'; //'Incorrect date format, please use (%s) ex. (%s)';
$this->ErrorMsgs['primary_lang_required'] = '!la_err_primary_lang_required!';
}
function SetDirtyField($field_name, $field_value)
{
$this->DirtyFieldValues[$field_name] = $field_value;
}
function GetDirtyField($field_name)
{
return $this->DirtyFieldValues[$field_name];
}
function GetOriginalField($field_name)
{
return $this->OriginalFieldValues[$field_name];
}
/**
* Sets original field value (useful for custom virtual fields)
*
* @param string $field_name
*/
function SetOriginalField($field_name, $field_value)
{
$this->OriginalFieldValues[$field_name] = $field_value;
}
/**
* Set's default values for all fields
*
* @param bool $populate_ml_fields create all ml fields from db in config or not
*
* @access public
*/
function SetDefaultValues($populate_ml_fields = false)
{
parent::SetDefaultValues($populate_ml_fields);
if ($populate_ml_fields) {
$this->PopulateMultiLangFields();
}
foreach ($this->Fields as $field => $params) {
if ( isset($params['default']) ) {
$this->SetDBField($field, $params['default']);
}
else {
$this->SetDBField($field, NULL);
}
}
}
/**
* Sets current item field value
* (applies formatting)
*
* @access public
* @param string $name Name of the field
* @param mixed $value Value to set the field to
* @return void
*/
function SetField($name,$value)
{
$options = $this->GetFieldOptions($name);
$parsed = $value;
if ($value == '') {
$parsed = NULL;
}
// kFormatter is always used, to make sure, that numeric value is converted to normal representation
// according to regional format, even when formatter is not set (try seting format to 1.234,56 to understand why)
$formatter =& $this->Application->recallObject(isset($options['formatter']) ? $options['formatter'] : 'kFormatter');
$parsed = $formatter->Parse($value, $name, $this);
$this->SetDBField($name,$parsed);
}
/**
* Sets current item field value
* (doesn't apply formatting)
*
* @access public
* @param string $name Name of the field
* @param mixed $value Value to set the field to
* @return void
*/
function SetDBField($name,$value)
{
$this->FieldValues[$name] = $value;
/*if (isset($this->Fields[$name]['formatter'])) {
$formatter =& $this->Application->recallObject($this->Fields[$name]['formatter']);
$formatter->UpdateSubFields($name, $value, $this->Fields[$name], $this);
}*/
}
/**
* Set's field error, if pseudo passed not found then create it with message text supplied.
* Don't owerrite existing pseudo translation.
*
* @param string $field
* @param string $pseudo
* @param string $error_label
*/
function SetError($field, $pseudo, $error_label = null, $error_params = null)
{
$error_field = isset($this->Fields[$field]['error_field']) ? $this->Fields[$field]['error_field'] : $field;
if (isset($this->FieldErrors[$error_field]['pseudo'])) {
// don't set more then one error on field
return ;
}
$this->FieldErrors[$error_field]['pseudo'] = $pseudo;
if (isset($error_params)) {
// additional params, that helps to determine error sources
$this->FieldErrors[$error_field]['params'] = $error_params;
}
if (isset($error_label) && !isset($this->ErrorMsgs[$pseudo])) {
// label for error (only when not already set)
$this->ErrorMsgs[$pseudo] = (substr($error_label, 0, 1) == '+') ? substr($error_label, 1) : '!'.$error_label.'!';
}
}
/**
* Return current item' field value by field name
* (doesn't apply formatter)
*
* @access public
* @param string $name field name to return
* @return mixed
*/
function GetDBField($name)
{
return $this->FieldValues[$name];
}
function HasField($name)
{
return isset($this->FieldValues[$name]);
}
function GetFieldValues()
{
return $this->FieldValues;
}
/**
* Sets item' fields corresponding to elements in passed $hash values.
*
* The function sets current item fields to values passed in $hash, by matching $hash keys with field names
* of current item. If current item' fields are unknown {@link kDBItem::PrepareFields()} is called before acutally setting the fields
*
* @access public
* @param Array $hash
* @param Array $set_fields Optional param, field names in target object to set, other fields will be skipped
* @return void
*/
function SetFieldsFromHash($hash, $set_fields=null)
{
// used in formatter which work with multiple fields together
foreach($hash as $field_name => $field_value)
{
if( eregi("^[0-9]+$", $field_name) || !array_key_exists($field_name,$this->Fields) ) continue;
if ( is_array($set_fields) && !in_array($field_name, $set_fields) ) continue;
$this->SetDirtyField($field_name, $field_value);
}
// formats all fields using associated formatters
foreach ($hash as $field_name => $field_value)
{
if( eregi("^[0-9]+$", $field_name) || !array_key_exists($field_name,$this->Fields) ) continue;
if ( is_array($set_fields) && !in_array($field_name, $set_fields) ) continue;
$this->SetField($field_name,$field_value);
}
}
function SetDBFieldsFromHash($hash, $set_fields=null)
{
foreach ($hash as $field_name => $field_value)
{
if( eregi("^[0-9]+$", $field_name) || !array_key_exists($field_name,$this->Fields) ) continue;
if ( is_array($set_fields) && !in_array($field_name, $set_fields) ) continue;
$this->SetDBField($field_name, $field_value);
}
}
/**
* Returns part of SQL WHERE clause identifing the record, ex. id = 25
*
* @access public
* @param string $method Child class may want to know who called GetKeyClause, Load(), Update(), Delete() send its names as method
* @param Array $keys_hash alternative, then item id, keys hash to load item by
* @return void
* @see kDBItem::Load()
* @see kDBItem::Update()
* @see kDBItem::Delete()
*/
function GetKeyClause($method=null, $keys_hash = null)
{
if( !isset($keys_hash) ) $keys_hash = Array($this->IDField => $this->ID);
$ret = '';
foreach($keys_hash as $field => $value)
{
if (!preg_match('/\./', $field)) {
$ret .= '(`'.$this->TableName.'`.'.$field.' = '.$this->Conn->qstr($value).') AND ';
}
else {
$ret .= '('.$field.' = '.$this->Conn->qstr($value).') AND ';
}
}
return preg_replace('/(.*) AND $/', '\\1', $ret);
}
/**
* Loads item from the database by given id
*
* @access public
* @param mixed $id item id of keys->values hash to load item by
* @param string $id_field_name Optional parameter to load item by given Id field
* @return bool True if item has been loaded, false otherwise
*/
function Load($id, $id_field_name = null)
{
if ( isset($id_field_name) ) $this->SetIDField( $id_field_name );
$keys_sql = '';
if( is_array($id) )
{
$keys_sql = $this->GetKeyClause('load', $id);
}
else
{
$this->setID($id);
$keys_sql = $this->GetKeyClause('load');
}
if ( isset($id_field_name) ) $this->setIDField( $this->Application->getUnitOption($this->Prefix, 'IDField') );
if( ($id === false) || !$keys_sql ) return $this->Clear();
if( !$this->raiseEvent('OnBeforeItemLoad', $id) ) return false;
$q = $this->GetSelectSQL().' WHERE '.$keys_sql;
$field_values = $this->Conn->GetRow($q);
if($field_values)
{
$this->FieldValues = array_merge_recursive2($this->FieldValues, $field_values);
$this->OriginalFieldValues = $this->FieldValues;
}
else {
return $this->Clear();
}
if( is_array($id) || isset($id_field_name) ) $this->setID( $this->FieldValues[$this->IDField] );
$this->UpdateFormattersSubFields(); // used for updating separate virtual date/time fields from DB timestamp (for example)
$this->raiseEvent('OnAfterItemLoad', $this->GetID() );
$this->Loaded = true;
return true;
}
/**
* Builds select sql, SELECT ... FROM parts only
*
* @access public
* @return string
*/
function GetSelectSQL()
{
$sql = $this->addCalculatedFields($this->SelectClause);
return parent::GetSelectSQL($sql);
}
function UpdateFormattersMasterFields()
{
foreach ($this->Fields as $field => $options) {
if (isset($options['formatter'])) {
$formatter =& $this->Application->recallObject($options['formatter']);
$formatter->UpdateMasterFields($field, $this->GetDBField($field), $options, $this);
}
}
}
function SkipField($field_name, $force_id=false)
{
$skip = false;
$skip = $skip || ( isset($this->VirtualFields[$field_name]) ); //skipping 'virtual' field
$skip = $skip || ( !getArrayValue($this->FieldValues, $field_name) && getArrayValue($this->Fields[$field_name], 'skip_empty') ); //skipping marked field with 'skip_empty'
// $skip = $skip || ($field_name == $this->IDField && !$force_id); //skipping Primary Key
// $table_name = preg_replace("/^(.*)\./", "$1", $field_name);
// $skip = $skip || ($table_name && ($table_name != $this->TableName)); //skipping field from other tables
$skip = $skip || ( !isset($this->Fields[$field_name]) ); //skipping field not in Fields (nor virtual, nor real)
return $skip;
}
/**
* Updates previously loaded record with current item' values
*
* @access public
* @param int Primery Key Id to update
* @return bool
*/
function Update($id=null, $system_update=false)
{
if( isset($id) ) $this->setID($id);
if( !$this->raiseEvent('OnBeforeItemUpdate') ) return false;
if( !isset($this->ID) ) return false;
// Validate before updating
if( !$this->IgnoreValidation && !$this->Validate() ) return false;
if( !$this->raiseEvent('OnAfterItemValidate') ) return false;
//Nothing to update
if(!$this->FieldValues) return true;
$sql = sprintf('UPDATE %s SET ',$this->TableName);
foreach ($this->FieldValues as $field_name => $field_value)
{
if ($this->SkipField($field_name)) continue;
$real_field_name = eregi_replace("^.*\.", '',$field_name); //removing table names from field names
//Adding part of SET clause for current field, escaping data with ADODB' qstr
if (is_null( $this->FieldValues[$field_name] )) {
if (isset($this->Fields[$field_name]['not_null']) && $this->Fields[$field_name]['not_null']) {
$sql .= '`'.$real_field_name.'` = '.$this->Conn->qstr($this->Fields[$field_name]['default']).', ';
}
else {
$sql .= '`'.$real_field_name.'` = NULL, ';
}
}
else {
$sql.= sprintf('`%s`=%s, ', $real_field_name, $this->Conn->qstr($this->FieldValues[$field_name], 0));
}
}
$sql = ereg_replace(", $", '', $sql); //Removing last comma and space
$sql.= sprintf(' WHERE %s', $this->GetKeyClause('update')); //Adding WHERE clause with Primary Key
if( $this->Conn->ChangeQuery($sql) === false ) return false;
$affected = $this->Conn->getAffectedRows();
if (!$system_update && $affected == 1){
$this->setModifiedFlag();
}
$this->saveCustomFields();
$this->raiseEvent('OnAfterItemUpdate');
$this->Loaded = true;
if ($this->mode != 't') {
$this->Application->resetCounters($this->TableName);
}
return true;
}
function ValidateField($field)
{
$options = $this->Fields[$field];
/*if (isset($options['formatter'])) {
$formatter =& $this->Application->recallObject($options['formatter']);
$formatter->UpdateMasterFields($field, $this->GetDBField($field), $options, $this);
}*/
$error_field = isset($options['error_field']) ? $options['error_field'] : $field;
$res = !isset($this->FieldErrors[$error_field]['pseudo']) || !$this->FieldErrors[$error_field]['pseudo'];
$res = $res && $this->ValidateType($field, $options);
$res = $res && $this->ValidateRange($field, $options);
$res = $res && $this->ValidateUnique($field, $options);
$res = $res && $this->ValidateRequired($field, $options);
$res = $res && $this->CustomValidation($field, $options);
return $res;
}
/**
* Validate all item fields based on
* constraints set in each field options
* in config
*
* @return bool
* @access private
*/
function Validate()
{
$this->UpdateFormattersMasterFields(); //order is critical - should be called BEFORE checking errors
$global_res = true;
foreach ($this->Fields as $field => $params) {
$res = $this->ValidateField($field);
$global_res = $global_res && $res;
}
if (!$global_res && $this->Application->isDebugMode()) {
$error_msg = ' Validation failed in prefix <strong>'.$this->Prefix.'</strong>,
FieldErrors follow (look at items with <strong>"pseudo"</strong> key set)<br />
You may ignore this notice if submitted data really has a validation error';
trigger_error(trim($error_msg), E_USER_NOTICE);
$this->Application->Debugger->dumpVars($this->FieldErrors);
}
return $global_res;
}
/**
* Check field value by user-defined alghoritm
*
* @param string $field field name
* @param Array $params field options from config
* @return bool
*/
function CustomValidation($field, $params)
{
return true;
}
/**
* Check if item has errors
*
* @param Array $skip_fields fields to skip during error checking
* @return bool
*/
function HasErrors($skip_fields)
{
$global_res = false;
foreach ($this->Fields as $field => $field_params) {
// If Formatter has set some error messages during values parsing
if ( !( in_array($field, $skip_fields) ) &&
isset($this->FieldErrors[$field]['pseudo']) && $this->FieldErrors[$field] != '') {
$global_res = true;
}
}
return $global_res;
}
/**
* Check if value in field matches field type specified in config
*
* @param string $field field name
* @param Array $params field options from config
* @return bool
*/
function ValidateType($field, $params)
{
$res = true;
$val = $this->FieldValues[$field];
if ( $val != '' &&
isset($params['type']) &&
preg_match("#int|integer|double|float|real|numeric|string#", $params['type'])
) {
$res = is_numeric($val);
if ($params['type']=='string' || $res) {
$f = 'is_'.$params['type'];
settype($val, $params['type']);
$res = $f($val) && ($val == $this->FieldValues[$field]);
}
if (!$res) {
$this->SetError($field, 'bad_type', null, $params['type']);
}
}
return $res;
}
/**
* Check if value is set for required field
*
* @param string $field field name
* @param Array $params field options from config
* @return bool
* @access private
*/
function ValidateRequired($field, $params)
{
$res = true;
if (isset($params['required']) && $params['required']) {
$res = ((string)$this->FieldValues[$field] != '');
}
$options = $this->GetFieldOptions($field);
if (!$res && getArrayValue($options, 'formatter') != 'kUploadFormatter') {
$this->SetError($field, 'required');
}
return $res;
}
/**
* Validates that current record has unique field combination among other table records
*
* @param string $field field name
* @param Array $params field options from config
* @return bool
* @access private
*/
function ValidateUnique($field, $params)
{
$res = true;
$unique_fields = getArrayValue($params,'unique');
if($unique_fields !== false)
{
$where = Array();
array_push($unique_fields,$field);
foreach($unique_fields as $unique_field)
{
// if field is not empty or if it is required - we add where condition
if ($this->GetDBField($unique_field) != '' || (isset($this->Fields[$unique_field]['required']) && $this->Fields[$unique_field]['required'])) {
$where[] = '`'.$unique_field.'` = '.$this->Conn->qstr( $this->GetDBField($unique_field) );
}
}
// This can ONLY happen if all unique fields are empty and not required.
// In such case we return true, because if unique field is not required there may be numerous empty values
if (!$where) return true;
$sql = 'SELECT COUNT(*) FROM %s WHERE ('.implode(') AND (',$where).') AND ('.$this->IDField.' <> '.(int)$this->ID.')';
$res_temp = $this->Conn->GetOne( str_replace('%s', $this->TableName, $sql) );
$current_table_only = getArrayValue($params, 'current_table_only'); // check unique record only in current table
$res_live = $current_table_only ? 0 : $this->Conn->GetOne( str_replace('%s', $this->Application->GetLiveName($this->TableName), $sql) );
$res = ($res_temp == 0) && ($res_live == 0);
if (!$res) {
$this->SetError($field, 'unique');
}
}
return $res;
}
/**
* Check if field value is in range specified in config
*
* @param string $field field name
* @param Array $params field options from config
* @return bool
* @access private
*/
function ValidateRange($field, $params)
{
$res = true;
$val = $this->FieldValues[$field];
if ( isset($params['type']) && preg_match("#int|integer|double|float|real#", $params['type']) && strlen($val) > 0 ) {
if ( isset($params['max_value_inc'])) {
$res = $res && $val <= $params['max_value_inc'];
$max_val = $params['max_value_inc'].' (inclusive)';
}
if ( isset($params['min_value_inc'])) {
$res = $res && $val >= $params['min_value_inc'];
$min_val = $params['min_value_inc'].' (inclusive)';
}
if ( isset($params['max_value_exc'])) {
$res = $res && $val < $params['max_value_exc'];
$max_val = $params['max_value_exc'].' (exclusive)';
}
if ( isset($params['min_value_exc'])) {
$res = $res && $val > $params['min_value_exc'];
$min_val = $params['min_value_exc'].' (exclusive)';
}
}
if (!$res) {
if ( !isset($min_val) ) $min_val = '-&infin;';
if ( !isset($max_val) ) $max_val = '&infin;';
$this->SetError($field, 'value_out_of_range', null, Array ($min_val, $max_val));
return $res;
}
if ( isset($params['max_len'])) {
$res = $res && strlen($val) <= $params['max_len'];
}
if ( isset($params['min_len'])) {
$res = $res && strlen($val) >= $params['min_len'];
}
if (!$res) {
$error_params = Array (getArrayValue($params, 'min_len'), getArrayValue($params, 'max_len'));
$this->SetError($field, 'length_out_of_range', null, $error_params);
return $res;
}
return $res;
}
/**
* Return error message for field
*
* @param string $field
* @return string
* @access public
*/
function GetErrorMsg($field, $force_escape = null)
{
if( !isset($this->FieldErrors[$field]) ) return '';
$err = getArrayValue($this->FieldErrors[$field], 'pseudo');
if (!$err) return '';
// if special error msg defined in config
if( isset($this->Fields[$field]['error_msgs'][$err]) )
{
$msg = $this->Fields[$field]['error_msgs'][$err];
}
else //fall back to defaults
{
if( !isset($this->ErrorMsgs[$err]) ) {
trigger_error('No user message is defined for pseudo error <b>'.$err.'</b><br>', E_USER_WARNING);
return $err; //return the pseudo itself
}
$msg = $this->ErrorMsgs[$err];
}
$msg = $this->Application->ReplaceLanguageTags($msg, $force_escape);
if ( isset($this->FieldErrors[$field]['params']) )
{
return vsprintf($msg, $this->FieldErrors[$field]['params']);
}
return $msg;
}
/**
* Creates a record in the database table with current item' values
*
* @param mixed $force_id Set to TRUE to force creating of item's own ID or to value to force creating of passed id. Do not pass 1 for true, pass exactly TRUE!
* @access public
* @return bool
*/
function Create($force_id=false, $system_create=false)
{
if( !$this->raiseEvent('OnBeforeItemCreate') ) return false;
// Validating fields before attempting to create record
if( !$this->IgnoreValidation && !$this->Validate() ) return false;
if( !$this->raiseEvent('OnAfterItemValidate') ) return false;
if (is_int($force_id)) {
$this->FieldValues[$this->IDField] = $force_id;
}
elseif (!$force_id || !is_bool($force_id)) {
$this->FieldValues[$this->IDField] = $this->generateID();
}
$fields_sql = '';
$values_sql = '';
foreach ($this->FieldValues as $field_name => $field_value) {
if ($this->SkipField($field_name, $force_id)) continue;
//Adding field' value to Values block of Insert statement, escaping it with qstr
if (is_null( $this->FieldValues[$field_name] )) {
if (isset($this->Fields[$field_name]['not_null']) && $this->Fields[$field_name]['not_null']) {
$values_sql .= $this->Conn->qstr($this->Fields[$field_name]['default'], 0);
}
else {
$values_sql .= 'NULL';
}
}
else {
if ($field_name == $this->IDField && $this->FieldValues[$field_name] == 0) {
$values_sql .= 'DEFAULT';
}
else {
$values_sql .= $this->Conn->qstr($this->FieldValues[$field_name], 0);
}
}
$fields_sql .= '`'.$field_name.'`, '; //Adding field name to fields block of Insert statement
$values_sql .= ', ';
}
//Cutting last commas and spaces
$fields_sql = ereg_replace(", $", '', $fields_sql);
$values_sql = ereg_replace(", $", '', $values_sql);
$sql = sprintf('INSERT INTO %s (%s) VALUES (%s)', $this->TableName, $fields_sql, $values_sql); //Formatting query
//Executing the query and checking the result
if ($this->Conn->ChangeQuery($sql) === false) return false;
$insert_id = $this->Conn->getInsertID();
if ($insert_id == 0) {
// insert into temp table (id is not auto-increment field)
$insert_id = $this->FieldValues[$this->IDField];
}
$this->setID($insert_id);
if (!$system_create){
$this->setModifiedFlag();
}
$this->saveCustomFields();
if ($this->mode != 't') {
$this->Application->resetCounters($this->TableName);
}
$this->raiseEvent('OnAfterItemCreate');
$this->Loaded = true;
return true;
}
/**
* Deletes the record from databse
*
* @access public
* @return bool
*/
function Delete($id = null)
{
if( isset($id) ) $this->setID($id);
if( !$this->raiseEvent('OnBeforeItemDelete') ) return false;
$q = 'DELETE FROM '.$this->TableName.' WHERE '.$this->GetKeyClause('Delete');
$ret = $this->Conn->ChangeQuery($q);
$this->setModifiedFlag();
if ($this->Conn->getAffectedRows() > 0) {
// something was actually deleted
$this->raiseEvent('OnAfterItemDelete');
}
if ($this->mode != 't') {
$this->Application->resetCounters($this->TableName);
}
return $ret;
}
function PopulateMultiLangFields()
{
$ml_helper =& $this->Application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
+
$lang_count = $ml_helper->getLanguageCount();
foreach ($this->Fields as $field => $options)
{
if (isset($options['formatter']) && $options['formatter'] == 'kMultiLanguage' && isset($options['master_field'])) {
if (preg_match('/^l([0-9]+)_(.*)/', $field, $regs)) {
$l = $regs[1];
$name = $regs[2];
unset($options['required']); // all non-primary language field set to non-required
for ($i=1; $i<=$lang_count; $i++) {
- if ($i == $l) continue;
+ if ($i == $l || !$ml_helper->LanguageFound($i)) continue;
$this->Fields['l'.$i.'_'.$name] = $options;
}
}
}
}
}
/**
* Sets new name for item in case if it is beeing copied
* in same table
*
* @param array $master Table data from TempHandler
* @param int $foreign_key ForeignKey value to filter name check query by
* @access private
*/
function NameCopy($master=null, $foreign_key=null)
{
$title_field = $this->Application->getUnitOption($this->Prefix, 'TitleField');
if (!$title_field || isset($this->CalculatedFields[$title_field]) ) return;
$new_name = $this->GetDBField($title_field);
$original_checked = false;
do {
if ( preg_match('/Copy ([0-9]*) *of (.*)/', $new_name, $regs) ) {
$new_name = 'Copy '.($regs[1]+1).' of '.$regs[2];
}
elseif ($original_checked) {
$new_name = 'Copy of '.$new_name;
}
// if we are cloning in temp table this will look for names in temp table,
// since object' TableName contains correct TableName (for temp also!)
// if we are cloning live - look in live
$query = 'SELECT '.$title_field.' FROM '.$this->TableName.'
WHERE '.$title_field.' = '.$this->Conn->qstr($new_name);
$foreign_key_field = getArrayValue($master, 'ForeignKey');
$foreign_key_field = is_array($foreign_key_field) ? $foreign_key_field[ $master['ParentPrefix'] ] : $foreign_key_field;
if ($foreign_key_field && isset($foreign_key)) {
$query .= ' AND '.$foreign_key_field.' = '.$foreign_key;
}
$res = $this->Conn->GetOne($query);
/*// if not found in live table, check in temp table if applicable
if ($res === false && $object->Special == 'temp') {
$query = 'SELECT '.$name_field.' FROM '.$this->GetTempName($master['TableName']).'
WHERE '.$name_field.' = '.$this->Conn->qstr($new_name);
$res = $this->Conn->GetOne($query);
}*/
$original_checked = true;
} while ($res !== false);
$this->SetDBField($title_field, $new_name);
}
function raiseEvent($name, $id = null, $additional_params = Array())
{
if( !isset($id) ) $id = $this->GetID();
$event = new kEvent( Array('name'=>$name,'prefix'=>$this->Prefix,'special'=>$this->Special) );
$event->setEventParam('id', $id);
if ($additional_params) {
foreach ($additional_params as $ap_name => $ap_value) {
$event->setEventParam($ap_name, $ap_value);
}
}
$this->Application->HandleEvent($event);
return $event->status == erSUCCESS ? true : false;
}
/**
* Set's new ID for item
*
* @param int $new_id
* @access public
*/
function setID($new_id)
{
$this->ID = $new_id;
$this->SetDBField($this->IDField, $new_id);
}
/**
* Generate and set new temporary id
*
* @access private
*/
function setTempID()
{
$new_id = (int)$this->Conn->GetOne('SELECT MIN('.$this->IDField.') FROM '.$this->TableName);
if($new_id > 0) $new_id = 0;
--$new_id;
$this->Conn->Query('UPDATE '.$this->TableName.' SET `'.$this->IDField.'` = '.$new_id.' WHERE `'.$this->IDField.'` = '.$this->GetID());
$this->SetID($new_id);
}
/**
* Set's modification flag for main prefix of current prefix to true
*
* @access private
* @author Alexey
*/
function setModifiedFlag()
{
$main_prefix = $this->Application->GetTopmostPrefix($this->Prefix);
$this->Application->StoreVar($main_prefix.'_modified', '1');
}
/**
* Returns ID of currently processed record
*
* @return int
* @access public
*/
function GetID()
{
return $this->ID;
}
/**
* Generates ID for new items before inserting into database
*
* @return int
* @access private
*/
function generateID()
{
return 0;
}
/**
* Returns true if item was loaded successfully by Load method
*
* @return bool
*/
function isLoaded()
{
return $this->Loaded;
}
/**
* Checks if field is required
*
* @param string $field
* @return bool
*/
function isRequired($field)
{
return getArrayValue( $this->Fields[$field], 'required' );
}
/**
* Sets new required flag to field
*
* @param string $field
* @param bool $is_required
*/
function setRequired($field, $is_required = true)
{
$this->Fields[$field]['required'] = $is_required;
}
function Clear($new_id = null)
{
$this->setID($new_id);
$this->Loaded = false;
$this->FieldValues = Array();
$this->OriginalFieldValues = Array ();
$this->SetDefaultValues();
$this->FieldErrors = Array();
return $this->Loaded;
}
function Query($force = false)
{
if( $this->Application->isDebugMode() )
{
$this->Application->Debugger->appendTrace();
}
trigger_error('<b>Query</b> method is called in class <b>'.get_class($this).'</b> for prefix <b>'.$this->getPrefixSpecial().'</b>', E_USER_ERROR);
}
function saveCustomFields()
{
if (!$this->customFields) {
return true;
}
$cdata_key = rtrim($this->Prefix.'-cdata.'.$this->Special, '.');
$cdata =& $this->Application->recallObject($cdata_key, null, Array('skip_autoload' => true, 'populate_ml_fields' => true));
$resource_id = $this->GetDBField('ResourceId');
$cdata->Load($resource_id, 'ResourceId');
$cdata->SetDBField('ResourceId', $resource_id);
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
/* @var $ml_formatter kMultiLanguage */
foreach ($this->customFields as $custom_id => $custom_name) {
$force_primary = isset($cdata->Fields['cust_'.$custom_id]['force_primary']) && $cdata->Fields['cust_'.$custom_id]['force_primary'];
$cdata->SetDBField($ml_formatter->LangFieldName('cust_'.$custom_id, $force_primary), $this->GetDBField('cust_'.$custom_name));
}
if ($cdata->isLoaded()) {
$ret = $cdata->Update();
}
else {
$ret = $cdata->Create();
if ($cdata->mode == 't') $cdata->setTempID();
}
return $ret;
}
/**
* Returns specified field value from all selected rows.
* Don't affect current record index
*
* @param string $field
* @return Array
*/
function GetCol($field)
{
return Array (0 => $this->GetDBField($field));
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/kernel/db/dbitem.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.44.2.3
\ No newline at end of property
+1.44.2.4
\ No newline at end of property
Index: branches/RC/core/units/related_searches/related_searches_tag_processor.php
===================================================================
--- branches/RC/core/units/related_searches/related_searches_tag_processor.php (revision 9333)
+++ branches/RC/core/units/related_searches/related_searches_tag_processor.php (revision 9334)
@@ -1,22 +1,20 @@
<?php
class RelatedSearchTagProcessor extends kDBTagProcessor {
-
/**
* Returns url for search on the Fornt End
*
* @param Array $params
* @return string
*/
function RelatedSearchUrl($params)
{
$object =& $this->getObject($params);
$keyword = $object->GetDBField('Keyword');
- return $this->Application->HREF($params['search_template'],'', Array(
- 'keywords' => $keyword,));
+ return $this->Application->HREF($params['search_template'],'', Array('keywords' => $keyword));
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/related_searches/related_searches_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1.2.1
\ No newline at end of property
+1.1.2.2
\ No newline at end of property
Index: branches/RC/core/units/general/helpers/multilanguage.php
===================================================================
--- branches/RC/core/units/general/helpers/multilanguage.php (revision 9333)
+++ branches/RC/core/units/general/helpers/multilanguage.php (revision 9334)
@@ -1,251 +1,292 @@
<?php
/**
* Performs action on multilingual fields
*
*/
class kMultiLanguageHelper extends kHelper {
+ /**
+ * Maximal language id
+ *
+ * @var int
+ */
var $languageCount = 0;
/**
+ * Languages created in system
+ *
+ * @var Array
+ */
+ var $languagesIDs = Array ();
+
+ /**
* Structure of table, that is currently processed
*
* @var Array
*/
var $curStructure = Array();
/**
* Field, to get structure information from
*
* @var string
*/
var $curSourceField = false;
/**
* Indexes used in table of 32
*
* @var int
*/
var $curIndexCount = 0;
/**
* Fields from config, that are currently used
*
* @var Array
*/
var $curFields = Array();
function kMultiLanguageHelper()
{
parent::kHelper();
$this->languageCount = $this->getLanguageCount();
}
/**
+ * Checks if language with specified id is created
+ *
+ * @param int $language_id
+ * @return bool
+ */
+ function LanguageFound($language_id)
+ {
+ return in_array($language_id, $this->languagesIDs) || $language_id <= 5;
+ }
+
+ /**
* Returns language count in system (always is divisible by 5)
*
*/
function getLanguageCount()
{
+ $id_field = $this->Application->getUnitOption('lang', 'IDField');
$table_name = $this->Application->getUnitOption('lang', 'TableName');
- $languages_count = $this->Conn->GetOne('SELECT COUNT(*) FROM '.$table_name);
- if (!$languages_count) {
- // during installation we have not languages, but we need to created custom field columns
- $languages_count = 1;
- }
- return $languages_count + 5 - ( $languages_count % 5 ? ($languages_count % 5) : 5 );
+
+ $this->languagesIDs = $this->Conn->GetCol('SELECT '.$id_field.' FROM '.$table_name);
+
+ $languages_count = $this->Conn->GetOne('SELECT MAX('.$id_field.') FROM '.$table_name);
+
+ return max($languages_count, 5);
}
function scanTable($mask)
{
$i = 0;
$fields_found = 0;
$fields = array_keys($this->curStructure);
foreach ($fields as $field_name) {
if (preg_match($mask, $field_name)) {
$fields_found++;
}
}
return $fields_found;
}
function readTableStructure($table_name, $refresh = false)
{
// if ($refresh || !getArrayValue($structure_status, $prefix.'.'.$table_name)) {
$this->curStructure = $this->Conn->Query('DESCRIBE '.$table_name, 'Field');
$this->curIndexCount = count($this->Conn->Query('SHOW INDEXES FROM '.$table_name));
// }
}
/**
* Creates missing multilanguage fields in table by specified prefix
*
* @param string $prefix
* @param bool $refresh Forces config field structure to be re-read from database
*/
function createFields($prefix, $refresh = false)
{
if ($refresh && preg_match('/(.*)-cdata$/', $prefix, $regs)) {
// call main item config to clone cdata table
$this->Application->UnitConfigReader->loadConfig($regs[1]);
$this->Application->HandleEvent( new kEvent($prefix.':OnAfterConfigRead') );
}
$table_name = $this->Application->getUnitOption($prefix, 'TableName');
$this->curFields = $this->Application->getUnitOption($prefix, 'Fields');
if (!($table_name && $this->curFields) || ($table_name && !$this->Conn->TableFound($table_name))) {
// invalid config found or prefix not found
return true;
}
$sqls = Array();
$this->readTableStructure($table_name, $refresh);
foreach($this->curFields as $field_name => $field_options)
{
if (getArrayValue($field_options, 'formatter') == 'kMultiLanguage') {
if (isset($field_options['master_field'])) {
unset($this->curFields[$field_name]);
continue;
}
-
- $created_count = $this->getCreatedCount($field_name);
- $create_count = $this->languageCount - $created_count;
- if ($create_count > 0) {
+
+ $this->setSourceField($field_name);
+ if ($this->languageCount > 0) {
// `l77_Name` VARCHAR( 255 ) NULL DEFAULT '0';
$field_mask = Array();
$field_mask['name'] = 'l%s_'.$field_name;
$field_mask['null'] = getArrayValue($field_options, 'not_null') ? 'NOT NULL' : 'NULL';
if ($this->curSourceField) {
$default_value = $this->getFieldParam('Default') != 'NULL' ? $this->Conn->qstr($this->getFieldParam('Default')) : $this->getFieldParam('Default');
$field_mask['type'] = $this->getFieldParam('Type');
}
else {
$default_value = is_null($field_options['default']) ? 'NULL' : $this->Conn->qstr($field_options['default']);
$field_mask['type'] = $field_options['db_type'];
}
$field_mask['default'] = 'DEFAULT '.$default_value;
-
+
if (strtoupper($field_mask['type']) == 'TEXT') {
// text fields in mysql doesn't have default value
$field_mask = $field_mask['name'].' '.$field_mask['type'].' '.$field_mask['null'];
}
else {
$field_mask = $field_mask['name'].' '.$field_mask['type'].' '.$field_mask['null'].' '.$field_mask['default'];
}
-
- $sqls[] = 'ALTER TABLE '.$table_name.( $this->generateAlterSQL($field_mask, $created_count + 1, $create_count) );
+
+ $alter_sqls = $this->generateAlterSQL($field_mask, 1, $this->languageCount);
+ if ($alter_sqls) {
+ $sqls[] = 'ALTER TABLE '.$table_name.' '.$alter_sqls;
+ }
}
}
}
foreach ($sqls as $sql_query) {
$this->Conn->Query($sql_query);
}
}
function deleteField($prefix, $custom_id)
{
$table_name = $this->Application->getUnitOption($prefix, 'TableName');
$sql = 'DESCRIBE '.$table_name.' "l%_cust_'.$custom_id.'"';
$fields = $this->Conn->GetCol($sql);
$sql = 'ALTER TABLE '.$table_name.' ';
$sql_template = 'DROP COLUMN %s, ';
foreach ($fields as $field_name) {
$sql .= sprintf($sql_template, $field_name);
}
$sql = preg_replace('/(.*), $/', '\\1', $sql);
$this->Conn->Query($sql);
}
/**
* Returns parameter requested of current source field
*
* @param string $param_name
* @return string
*/
function getFieldParam($param_name)
{
return $this->curStructure[$this->curSourceField][$param_name];
}
- function getCreatedCount($field_name)
+ /**
+ * Detects field name to create other fields from
+ *
+ * @param string $field_name
+ */
+ function setSourceField($field_name)
{
$ret = $this->scanTable('/^l[\d]+_'.preg_quote($field_name, '/').'$/');
if (!$ret) {
// no multilingual fields at all (but we have such field without language prefix)
$original_found = $this->scanTable('/'.preg_quote($field_name, '/').'/');
$this->curSourceField = $original_found ? $field_name : false;
}
else {
$this->curSourceField = 'l1_'.$field_name;
}
- return $ret;
}
+
/**
* Returns ALTER statement part for adding required fields to table
*
* @param string $field_mask sql mask for creating field with correct definition (type & size)
* @param int $start_index add new fields starting from this index
* @param int $create_count create this much new multilingual field translations
* @return string
*/
function generateAlterSQL($field_mask, $start_index, $create_count)
{
static $single_lang = null;
if (!isset($single_lang)) {
// if single language mode, then create indexes only on primary columns
$table_name = $this->Application->getUnitOption('lang', 'TableName');
$sql = 'SELECT COUNT(*)
FROM '.$table_name.'
WHERE Enabled = 1';
// if language count = 0, then assume it's multi language mode
$single_lang = $this->Conn->GetOne($sql) == 1;
}
- $ret = ' ';
- $ml_field = preg_replace('/l(.*)_(.*?) (.*)/', '\\2', $field_mask);
-
+ $ret = '';
+ $ml_field = preg_replace('/l(.*?)_(.*?) (.*)/', '\\2', $field_mask);
+
$i_count = $start_index + $create_count;
while ($start_index < $i_count) {
- list($prev_field,$type) = explode(' ', sprintf($field_mask, $start_index - 1) );
+
+ if (isset($this->curStructure['l'.$start_index.'_'.$ml_field]) || (!$this->LanguageFound($start_index)) ) {
+ $start_index++;
+ continue;
+ }
+
+ $prev_index = $start_index - 1;
+ do {
+ list($prev_field,$type) = explode(' ', sprintf($field_mask, $prev_index) );
+ } while ($prev_index > 0 && !$this->LanguageFound($prev_index--));
+
if (substr($prev_field, 0, 3) == 'l0_') {
$prev_field = substr($prev_field, 3, strlen($prev_field));
if (!$this->curSourceField) {
// get field name before this one
$fields = array_keys($this->curFields);
// $prev_field = key(end($this->curStructure));
$prev_field = $fields[array_search($prev_field, $fields) - 1];
if (getArrayValue($this->curFields[$prev_field], 'formatter') == 'kMultiLanguage') {
$prev_field = 'l'.$this->languageCount.'_'.$prev_field;
}
}
}
$field_expression = sprintf($field_mask, $start_index);
$ret .= 'ADD COLUMN '.$field_expression.' AFTER `'.$prev_field.'`, ';
if ($this->curIndexCount < 32 && ($start_index == $this->Application->GetDefaultLanguageId() || !$single_lang)) {
// create index for primary language column + for all others (if multiple languages installed)
list($field_name, $field_params) = explode(' ', $field_expression, 2);
-
+
$index_type = isset($this->curFields[$ml_field]['index_type']) ? $this->curFields[$prev_field]['index_type'] : 'string';
-
+
$ret .= $index_type == 'string' ? 'ADD INDEX (`'.$field_name.'` (5) ), ' : 'ADD INDEX (`'.$field_name.'`), ';
$this->curIndexCount++;
}
$start_index++;
}
- return preg_replace('/, $/',';',$ret);
+ return preg_replace('/, $/', ';', $ret);
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/general/helpers/multilanguage.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.15
\ No newline at end of property
+1.15.2.1
\ No newline at end of property
Index: branches/RC/core/admin_templates/categories/categories_edit_related_searches.tpl
===================================================================
--- branches/RC/core/admin_templates/categories/categories_edit_related_searches.tpl (revision 9333)
+++ branches/RC/core/admin_templates/categories/categories_edit_related_searches.tpl (revision 9334)
@@ -1,115 +1,115 @@
<inp2:m_RequireLogin permissions="CATEGORY.VIEW"/>
<inp2:m_include t="incs/header" nobody="yes"/>
<body topmargin="0" leftmargin="8" marginheight="0" marginwidth="8" bgcolor="#FFFFFF">
<inp2:m_RenderElement name="section_header" prefix="c" icon="icon46_catalog" module="in-portal" title="!la_title_Categories!"/>
<inp2:m_include t="in-portal/categories/categories_tabs"/>
<inp2:m_RenderElement name="blue_bar" prefix="c" title_preset="categories_related_searches" module="in-portal" icon="icon46_catalog"/>
<!-- 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('c','<inp2:c_SaveEvent/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
submit_event('c','OnCancelEdit');
}
) );
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('c', '<inp2:c_PrevId/>');
}
) );
a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() {
go_to_id('c', '<inp2:c_NextId/>');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep2') );
//Relations related:
- a_toolbar.AddButton( new ToolBarButton('new_related_search', '<inp2:m_phrase label="la_ToolTip_New_Keyword" escape="1"/>',
+ a_toolbar.AddButton( new ToolBarButton('in-portal:new_related_search', '<inp2:m_phrase label="la_ToolTip_New_Keyword" escape="1"/>',
function() {
std_new_item('c-search', 'in-portal/categories/related_searches_edit')
} ) );
function edit()
{
std_edit_temp_item('c-search', 'in-portal/categories/related_searches_edit');
}
a_toolbar.AddButton( new ToolBarButton('edit', '<inp2:m_phrase label="la_ToolTip_Edit" escape="1"/>', edit) );
a_toolbar.AddButton( new ToolBarButton('delete', '<inp2:m_phrase label="la_ToolTip_Delete" escape="1"/>',
function() {
std_delete_items('c-search')
} ) );
a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Approve" escape="1"/>', function() {
submit_event('c-search','OnMassApprove');
}
) );
a_toolbar.AddButton( new ToolBarButton('decline', '<inp2:m_phrase label="la_ToolTip_Decline" escape="1"/>', function() {
submit_event('c-search','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep4') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
<inp2:m_if check="c_IsSingle" >
a_toolbar.HideButton('prev');
a_toolbar.HideButton('next');
a_toolbar.HideButton('sep1');
//a_toolbar.HideButton('sep2');
<inp2:m_else/>
<inp2:m_if check="c_IsLast" >
a_toolbar.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="c_IsFirst" >
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</script>
</td>
</tr>
</tbody>
</table>
<inp2:m_DefineElement name="grid_keyword_td" >
<td valign="top" class="text">
<input type="checkbox" name="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>" id="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>">
<img src="<inp2:ModulePath module="In-Portal"/>img/itemicons/<inp2:{$PrefixSpecial}_ItemIcon grid="$grid"/>">
<inp2:Field field="$field" grid="$grid"/><span class="priority"><inp2:m_if check="{$PrefixSpecial}_fieldequals" field="Priority" value="0"><inp2:m_else/><sup><inp2:{$PrefixSpecial}_field field="Priority" /></sup></inp2:m_if></span>
</td>
</inp2:m_DefineElement>
<inp2:m_RenderElement name="grid" PrefixSpecial="c-search" IdField="RelatedSearchId" grid="Default" menu_filters="yes"/>
<script type="text/javascript">
Grids['c-search'].SetDependantToolbarButtons( new Array('edit','delete','approve','decline') );
</script>
<input type="hidden" name="RelatedSearchId" id="RelatedSearchId" value="<inp2:m_get name="RelatedSearchId"/>">
<inp2:m_include t="incs/footer"/>
<script type="text/javascript">
var $env = document.getElementById('sid').value+'-:m<inp2:m_get name="m_cat_id"/>-1-1-1-s';
</script>
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/categories/categories_edit_related_searches.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1.2.1
\ No newline at end of property
+1.1.2.2
\ No newline at end of property
Index: branches/RC/core/admin_templates/js/uploader.js
===================================================================
--- branches/RC/core/admin_templates/js/uploader.js (revision 9333)
+++ branches/RC/core/admin_templates/js/uploader.js (revision 9334)
@@ -1,441 +1,443 @@
function Uploader(id, params)
{
this.id = id;
if (params.multiple.length == 0) params.multiple = 1;
this.params = params;
this.files_count = 0;
this.files = new Array();
this.deleted = new Array()
this.uploadURL = params.uploadURL;
this.deleteURL = params.deleteURL;
}
Uploader.prototype.Init = function()
{
var holder = document.createElement('DIV');
document.body.appendChild(holder);
-
+
+ document.getElementById($form_name).style.display = 'block';
+
// moving out progress div to overcome loosing of flash object after setting opacity
-
this.div = document.getElementById(this.id+'_progress');
var clone = this.div.cloneNode(true);
this.div.parentNode.removeChild(this.div)
this.div = document.body.appendChild(clone);
+ this.IconPath = this.params.IconPath ? this.params.IconPath : '../cmseditor/editor/images';
this.filename = document.getElementById(this.id+'_progress_filename');
this.progress = document.getElementById(this.id+'_progress_progress');
this.elapsed = document.getElementById(this.id+'_progress_elapsed');
this.remaining = document.getElementById(this.id+'_progress_remaining');
this.percent = document.getElementById(this.id+'_percent');
this.done = document.getElementById(this.id+'_done');
this.total = 0;
this.uploaded = 0;
this.flash_id = UploadsManager.NextFlashId();
this.swf = new SWFObject('swfupload.swf', this.flash_id, "0", "0", "8", "#000000");
this.swf.setAttribute('style', '');
this.swf.addVariable("uploadScript", '');
this.swf.addVariable("maxFiles", escape(this.params.multiple));
- this.swf.addVariable("allowedFilesize", escape(this.params.allowedFilesize));
- this.swf.addVariable("allowedFiletypes", escape(this.params.allowedFiletypes));
- this.swf.addVariable("allowedFiletypesDescription", escape(this.params.allowedFiletypesDescription));
-
- this.swf.addVariable("uploadFileQueuedCallback", escape('UploadsManager.FileSelected'));
- this.swf.addVariable("uploadFileStartCallback", escape('UploadsManager.UploadFileStart'));
- this.swf.addVariable("uploadProgressCallback", escape('UploadsManager.UploadProgress'));
- this.swf.addVariable("uploadFileCompleteCallback", escape('UploadsManager.UploadFileComplete'));
- this.swf.addVariable("uploadFileCancelCallback", escape('UploadsManager.FileCancelled'));
- this.swf.addVariable("uploadQueueCompleteCallback", escape('UploadsManager.UploadQueueComplete'));
- this.swf.addVariable("uploadFileErrorCallback", escape('UploadsManager.UploadError'));
- this.swf.addVariable("autoUpload", escape('false'));
-// this.swf.addVariable("flashLoadedCallback", 'flashLoadedCallback');
+ this.swf.addVariable("allowedFilesize", escape(this.params.allowedFilesize));
+ this.swf.addVariable("allowedFiletypes", escape(this.params.allowedFiletypes));
+ this.swf.addVariable("allowedFiletypesDescription", escape(this.params.allowedFiletypesDescription));
+
+ this.swf.addVariable("uploadFileQueuedCallback", escape('UploadsManager.FileSelected'));
+ this.swf.addVariable("uploadFileStartCallback", escape('UploadsManager.UploadFileStart'));
+ this.swf.addVariable("uploadProgressCallback", escape('UploadsManager.UploadProgress'));
+ this.swf.addVariable("uploadFileCompleteCallback", escape('UploadsManager.UploadFileComplete'));
+ this.swf.addVariable("uploadFileCancelCallback", escape('UploadsManager.FileCancelled'));
+ this.swf.addVariable("uploadQueueCompleteCallback", escape('UploadsManager.UploadQueueComplete'));
+ this.swf.addVariable("uploadFileErrorCallback", escape('UploadsManager.UploadError'));
+ this.swf.addVariable("autoUpload", escape('false'));
+// this.swf.addVariable("flashLoadedCallback", 'flashLoadedCallback');
- this.swf.addVariable("uploadScriptCallback", escape('UploadsManager.GetUploadScript'));
- this.swf.addVariable("uploaderId", escape(this.id));
+ this.swf.addVariable("uploadScriptCallback", escape('UploadsManager.GetUploadScript'));
+ this.swf.addVariable("uploaderId", escape(this.id));
this.swf.write(holder);
- this.flash = document.getElementById(this.flash_id);
- /*if (this.flash != null) {
- if(this.flash.PercentLoaded() == 100) {
- alert('done movie: '+this.flash.PercentLoaded());
- }
+ this.flash = document.getElementById(this.flash_id);
+/* if (this.flash != null) {
+ if(this.flash.PercentLoaded() == 100) {
+ alert('done movie: '+this.flash.PercentLoaded());
+ }
}
else {
alert('this.flash is null')
}*/
if (this.params.urls != '') {
- var urls = this.params.urls.split('|');
- var names = this.params.names.split('|');
- var sizes = this.params.sizes.split('|');
- for (var i in urls) {
+ var urls = this.params.urls.split('|');
+ var names = this.params.names.split('|');
+ var sizes = this.params.sizes.split('|');
+ for (var i in urls) {
var a_file = {
id : names[i],
name : names[i],
url : urls[i],
size: sizes[i],
uploaded : 1
}
this.files.push(a_file)
this.files_count++;
- }
- this.UpdateInfo();
- }
+ }
+ this.UpdateInfo();
+ }
}
Uploader.prototype.UpdateInfo = function()
{
var o = '';
for (var f in this.files) {
this.files[f].name.match(/\.([^.]*)$/);
var ext = RegExp.$1;
var icon = ext.match(/^(ai|avi|bmp|cs|dll|doc|dot|exe|fla|gif|htm|html|jpg|js|mdb|mp3|pdf|ppt|rdp|swf|swt|txt|vsd|xls|xml|zip)$/) ? ext : 'default.icon';
- o += '<img src="../cmseditor/editor/images/'+icon+'.gif" style="position: relative; top: 2px;">&nbsp;';
+ o += '<img src="' + this.IconPath + '/' + icon+'.gif" style="position: relative; top: 2px;">&nbsp;';
if (isset(this.files[f].uploaded)) {
o += '<a href="'+this.files[f].url+'" target="_new">'+this.files[f].name + '</a> ('+this.FormatSize(this.files[f].size)+')&nbsp;[<a href="javascript:UploadsManager.DeleteFile(\''+this.id+'\', \''+this.files[f].name+'\')">Delete</a>]<br/>';
}
else {
o += this.files[f].name + ' ('+this.FormatSize(this.files[f].size)+')&nbsp;[<a href="javascript:UploadsManager.CancelFile(\''+this.files[f].uploader_id+'\', \''+this.files[f].id+'\')">Delete</a>]<br/>';
}
}
document.getElementById(this.id+'_queueinfo').innerHTML = o;
this.PrepareFiles()
}
Uploader.prototype.RemoveFile = function(file)
{
var n_files = new Array();
var count=0;
this.total=0;
for (var f in this.files) {
if (this.files[f].id != file.id && this.files[f].name != file.id ) {
n_files.push(this.files[f]);
if (!isset(this.files[f].uploaded)) {
this.total += file.size
}
count++;
}
}
this.files = n_files;
this.files_count = count;
this.UpdateInfo();
}
Uploader.prototype.GetUploadScript = function(file)
{
// document.getElementById(this.id+'[my_tmp]').value = file.id;
return this.uploadURL.replace('#ID#', file.id).replace('#FIELD#', this.params.field).replace('#SID#', this.params.flashsid);
}
Uploader.prototype.PrepareFiles = function()
{
var ids = '';
var names = '';
for (var f in this.files) {
if (isset(this.files[f].uploaded) && !isset(this.files[f].temp)) continue;
ids += this.files[f].id + '|'
names += this.files[f].name + '|'
}
ids = ids.replace(/\|$/, '', ids);
names = names.replace(/\|$/, '', names);
document.getElementById(this.id+'[tmp_ids]').value = ids;
document.getElementById(this.id+'[tmp_names]').value = names;
document.getElementById(this.id+'[tmp_deleted]').value = this.deleted.join('|');
}
Uploader.prototype.HasQueue = function()
{
for (var f in this.files) {
if (isset(this.files[f].uploaded)) continue;
return true;
}
return false;
}
Uploader.prototype.StartUpload = function()
{
if (!this.HasQueue()) return;
Request.setOpacity(30, Form.Div);
if (!document.all) {
var $winW = window.innerWidth;
var $winH = window.innerHeight;
}
else {
var $winW = window.document.body.offsetWidth;
var $winH = window.document.body.offsetHeight;
}
var left = Math.round(($winW - 350)/2)+'px';
var top = Math.round(($winH - 110)/2)+'px';
this.div.style.top = top;
this.div.style.left = left;
this.div.style.display = 'block';
Request.setOpacity(100, this.div);
this.StartTime = this.GetMicroTime();
this.ProgressPercent = 0; // progress percent
this.ProgressTime = new Array();
this.uploaded = 0;
this.total = 0;
for (var f in this.files) {
if (isset(this.files[f].uploaded)) continue;
this.total += this.files[f].size;
}
document.getElementById(this.flash_id).upload();
}
Uploader.prototype.GetMicroTime = function() {
var $now = new Date();
return Math.round($now.getTime() / 1000); // because miliseconds are returned too
}
Uploader.prototype.GetEstimatedTime = function() {
return Math.ceil((100 - this.ProgressPercent) * this.ProgressTime / this.ProgressPercent);
}
Uploader.prototype.FormatTime = function ($seconds) {
$seconds = parseInt($seconds);
var $minutes = Math.floor($seconds / 60);
if ($minutes < 10) $minutes = '0' + $minutes;
$seconds = $seconds % 60;
if ($seconds < 10) $seconds = '0' + $seconds;
return $minutes + ':' + $seconds;
}
Uploader.prototype.FormatSize = function (bytes) {
var kb = Math.round(bytes / 1024);
if (kb < 1024) return kb+'Kb';
var mb = Math.round(kb / 1024 * 100)/100;
return mb+'Mb';
}
Uploader.prototype.UploadFileStart = function(file, position, queuelength)
{
this.filename.innerHTML = file.name;
}
Uploader.prototype.UploadProgress = function(file, bytesLoaded)
{
this.cur_file_uploaded = bytesLoaded;
-
var uploaded = this.uploaded+this.cur_file_uploaded;
this.ProgressTime = this.GetMicroTime() - this.StartTime;
var speed = 0;
if (this.ProgressTime > 0) {
speed = Math.round(uploaded/this.ProgressTime*100)/100;
}
this.progress.innerHTML = this.FormatSize(uploaded)+' / '+this.FormatSize(this.total) + ' ('+this.FormatSize(speed)+'/s)';
this.ProgressPercent = Math.round(uploaded/this.total*100);
this.done.style.width = this.ProgressPercent+'%';
this.percent.innerHTML = this.ProgressPercent+'%';
this.elapsed.innerHTML = this.FormatTime(this.ProgressTime );
this.remaining.innerHTML = this.FormatTime( this.GetEstimatedTime() );
}
Uploader.prototype.UploadFileComplete = function(file)
{
this.uploaded += this.cur_file_uploaded;
for (var f in this.files) {
if (this.files[f].id == file.id) {
this.files[f].uploaded = 1;
this.files[f].temp = 1;
this.files[f].url = this.params.tmp_url.replace('#ID#', file.id).replace('#FILE#', file.name).replace('#FIELD#', this.params.field);
}
}
this.UpdateInfo();
}
// MANAGER
function UploadsManager() {
// hooking to standard toolbar select button to peform auto-upload when Save is clicked
if (isset(a_toolbar)) {
if (a_toolbar.ButtonExists('select')) {
var old_onclick = a_toolbar.Buttons['select'].onClick;
a_toolbar.Buttons['select'].onClick = function() {
UploadsManager.UploadAll(function() {old_onclick()});
}
}
}
addLoadEvent(function() {UploadsManager.InitAll()});
}
UploadsManager = new UploadsManager();
UploadsManager.Uploaders = new Object();
UploadsManager.nextId = 0;
UploadsManager.NextFlashId = function()
{
this.nextId++;
return 'uploaderflash'+this.nextId;
}
UploadsManager.AddUploader = function(id, params )
{
this.Uploaders[id] = new Uploader(id, params);
}
UploadsManager.InitAll = function()
{
for (var i in this.Uploaders) {
this.Uploaders[i].Init();
}
}
UploadsManager.FileSelected = function(file)
{
var upl = this.Uploaders[file.uploader_id]
if (upl.files_count >= upl.params.multiple) {
if (upl.params.multiple > 1) {
alert('too many files');
upl.flash.cancelFile(file.id);
}
else {
upl.files_count++;
upl.files.push(file);
upl.total += file.size;
if (upl.files[0].uploaded) {
UploadsManager.DeleteFile(file.uploader_id, upl.files[0].name, true);
}
else {
upl.flash.cancelFile(upl.files[0].id);
}
}
}
else {
upl.files_count++;
upl.files.push(file);
upl.total += file.size;
}
upl.UpdateInfo();
}
UploadsManager.FileCancelled = function(file)
{
this.Uploaders[file.uploader_id].RemoveFile(file);
}
UploadsManager.GetUploadScript = function(file)
{
return this.Uploaders[file.uploader_id].GetUploadScript(file);
}
UploadsManager.UploadError = function(errno, file, msg)
{
this.Uploaders[file.uploader_id].RemoveFile(file);
+
if (errno == -10) {
switch (msg.toString()) {
case '403':
msg = 'You don\'t have permission to upload';
break;
case '500':
msg = 'Write permissions not set on the server, please contact server administrator';
break;
}
}
alert('Error: '+msg+'\nOccured on file '+file.name);
}
UploadsManager.DeleteFile = function(mov, fname, confirmed)
{
if (!confirmed && !confirm('Are you sure you want to delete this file?')) return;
Request.makeRequest(
this.Uploaders[mov].deleteURL.replace('#FILE#', fname).replace('#FIELD#', this.Uploaders[mov].params.field),
false, '',
function(req, fname, upl) {
upl.RemoveFile({id:fname})
upl.deleted.push(fname);
upl.UpdateInfo();
},
function(req, fname, upl) {alert('Error while deleting file')},
fname, this.Uploaders[mov]
);
}
UploadsManager.Browse = function(id)
{
this.Uploaders[id].flash.browse()
}
UploadsManager.StartUpload = function(id)
{
this.uploadCancelled = false;
this.Uploaders[id].StartUpload();
}
UploadsManager.CancelFile = function(id, file_id)
{
this.Uploaders[id].flash.cancelFile(file_id)
}
UploadsManager.UploadAll = function(onAllUploaded)
{
if (!this.HasQueue()) {
onAllUploaded();
return;
}
this.uploadCancelled = false;
for (var i in this.Uploaders) {
this.Uploaders[i].StartUpload();
}
this.OnAllUploaded = onAllUploaded;
}
UploadsManager.UploadFileStart = function(file, position, queuelength)
{
this.Uploaders[file.uploader_id].UploadFileStart(file, position, queuelength);
}
UploadsManager.UploadProgress = function(file, bytesLoaded)
{
this.Uploaders[file.uploader_id].UploadProgress(file, bytesLoaded);
}
UploadsManager.UploadFileComplete = function(file)
{
this.Uploaders[file.uploader_id].UploadFileComplete(file);
}
UploadsManager.HasQueue = function()
{
var has_queue = false;
for (var i in this.Uploaders) {
var tmp = this.Uploaders[i].HasQueue()
has_queue = has_queue || tmp;
}
return has_queue;
}
UploadsManager.UploadQueueComplete = function(file)
{
Request.setOpacity(100, Form.Div);
var all_done = true;
for (var i in this.Uploaders) {
this.Uploaders[i].div.style.display='none';
all_done == all_done && !this.Uploaders[i].HasQueue();
}
if (all_done && isset(this.OnAllUploaded) && !this.uploadCancelled) {
this.OnAllUploaded();
}
}
UploadsManager.CancelUpload = function(id)
{
this.Uploaders[id].flash.cancelQueue();
this.uploadCancelled = true;
}
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/js/uploader.js
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.3.4.1
\ No newline at end of property
Index: branches/RC/core/admin_templates/img/toolbar/tool_new_related_search_f2.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/RC/core/admin_templates/img/toolbar/tool_new_related_search_f2.gif
___________________________________________________________________
Deleted: cvs2svn:cvs-rev
## -1 +0,0 ##
-1.1.2.1
\ No newline at end of property
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: branches/RC/core/admin_templates/img/toolbar/tool_new_related_search.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/RC/core/admin_templates/img/toolbar/tool_new_related_search.gif
___________________________________________________________________
Deleted: cvs2svn:cvs-rev
## -1 +0,0 ##
-1.1.2.1
\ No newline at end of property
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: branches/RC/core/admin_templates/incs/style.css
===================================================================
--- branches/RC/core/admin_templates/incs/style.css (revision 9333)
+++ branches/RC/core/admin_templates/incs/style.css (revision 9334)
@@ -1,670 +1,712 @@
/* --- In-Portal --- */
html {
height: 100%;
}
.head_version {
font-family: verdana, arial;
font-size: 10px;
font-weight: normal;
color: white;
padding-right: 5px;
text-decoration: none;
}
body {
font-family: Verdana, Arial, Helvetica, Sans-serif;
font-size: 12px;
color: #000000;
scrollbar-3dlight-color: #333333;
scrollbar-arrow-color: #ffffff;
scrollbar-track-color: #88d2f8;
scrollbar-darkshadow-color: #333333;
scrollbar-highlight-color: #009ffd;
scrollbar-shadow-color: #009ffd;
scrollbar-face-color: #009ffd;
overflow-x: auto; overflow-y: auto;
height: 100%;
margin: 0px 0px 0px 8px
}
A {
color: #006699;
text-decoration: none;
}
A:hover {
color: #009ff0;
text-decoration: none;
}
TD {
font-family: verdana,helvetica;
font-size: 10pt;
text-decoration: none;
}
form {
display: inline;
}
.bordered, table.bordered, .bordered-no-bottom {
border: 1px solid #000000;
border-collapse: collapse;
}
.bordered-no-bottom {
border-bottom: none;
}
.text {
font-family: verdana, arial;
font-size: 12px;
font-weight: normal;
text-decoration: none;
}
.tablenav {
font-family: verdana, arial;
font-size: 14px;
font-weight: bold;
color: #FFFFFF;
text-decoration: none;
background-color: #73C4F5;
background: url(../img/tabnav_back.gif) repeat-x;
}
.header_left_bg {
background: url(../img/tabnav_left.gif) no-repeat;
}
.tablenav_link {
font-family: verdana, arial;
font-size: 14px;
font-weight: bold;
color: #FFFFFF;
text-decoration: none;
}
/*.tablenav_link:hover {
font-family: verdana, arial;
font-size: 14px;
font-weight: bold;
color: #ffcc00;
text-decoration: none;
}*/
.tableborder {
font-family: arial, helvetica, sans-serif;
font-size: 10pt;
border: 1px solid #000000;
border-top-width: 0px;
border-collapse: collapse;
}
.tableborder_full, .tableborder_full_kernel {
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
border: 1px solid #000000;
border-collapse: collapse;
}
.tableborder_full {
border-bottom-width: 0px;
}
.search-cell {
padding-right: 0px;
white-space: nowrap;
}
.search-box {
border: 1px solid #808080;
}
.button {
font-family: arial, verdana;
font-size: 12px;
font-weight: normal;
color: #000000;
background: url(../img/button_back.gif) #f9eeae repeat-x;
text-decoration: none;
}
.button-disabled {
font-family: arial, verdana;
font-size: 12px;
font-weight: normal;
color: #676767;
background: url(../img/button_back_disabled.gif) #f9eeae repeat-x;
text-decoration: none;
}
.hint_red {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
font-style: normal;
color: #FF0000;
/* background-color: #F0F1EB; */
}
.tree_head {
font-family: verdana, arial;
font-size: 10px;
font-weight: bold;
color: #FFFFFF;
text-decoration: none;
}
.admintitle {
font-family: verdana, arial;
font-size: 20px;
font-weight: bold;
color: #009FF0;
text-decoration: none;
}
.table_border_notop, .table_border_nobottom {
background-color: #F0F1EB;
border: 1px solid #000000;
border-collapse: collapse;
}
.table_border_notop {
border-top-width: 0px;
}
.table_border_nobottom {
border-bottom-width: 0px;
}
.pagination_bar {
background-color: #D7D7D7;
border: 1px solid #000000;
border-top-width: 0px;
border-collapse: collapse;
}
.totals-row td {
background-color: #D7D7D7;
border-bottom: 1px solid #000000;
border-top: 1px solid #000000;
font-weight: bold;
}
/* Categories */
.priority {
color: #FF0000;
padding-left: 1px;
padding-right: 1px;
font-size: 11px;
}
.cat_no, .cat_desc, .cat_new, .cat_pick, .cats_stats {
font-family: arial, verdana, sans-serif;
}
.cat_no {
font-size: 10px;
color: #707070;
}
.cat_desc {
font-size: 9pt;
color: #000000;
}
.cat_new {
font-size: 12px;
vertical-align: super;
color: blue;
}
.cat_pick {
font-size: 12px;
vertical-align: super;
color: #009900;
}
.cats_stats {
font-size: 11px;
color: #707070;
}
/* Links */
.link, .link:hover, .link_desc, .link_detail {
font-family: arial, helvetica, sans-serif;
}
.link {
font-size: 9pt;
color: #1F569A;
}
.link:hover {
font-size: 9pt;
color: #009FF0;
}
.link_desc {
font-size: 9pt;
color: #000000;
}
.link_detail {
font-size: 11px;
color: #707070;
}
.link_rate, .link_review, .link_modify, .link_div, .link_new, .link_top, .link_pop, .link_pick {
font-family: arial, helvetica, sans-serif;
font-size: 12px;
}
.link_rate, .link_review, .link_modify, .link_div {
text-decoration: none;
}
.link_rate { color: #006600; }
.link_review { color: #A27900; }
.link_modify { color: #800000; }
.link_div { color: #000000; }
.link_new, .link_top, .link_pop, .link_pick {
vertical-align: super;
}
.link_new { color: #0000FF; }
.link_top { color: #FF0000; }
.link_pop { color: FFA500; }
.link_pick { color: #009900; }
/* ToolBar */
.divider {
BACKGROUND-COLOR: #999999
}
.toolbar {
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
border: 1px solid #000000;
border-width: 0 1 1 1;
background-color: #F0F1EB;
border-collapse: collapse;
}
.current_page {
font-family: verdana;
font-size: 12px;
font-weight: bold;
background-color: #C4C4C4;
padding-left: 1px;
padding-right: 1px;
}
.nav_url {
font-family: verdana;
font-size: 12px;
font-weight: bold;
color: #1F569A;
}
.nav_arrow {
font-family: verdana;
font-size: 12px;
font-weight: normal;
color: #1F569A;
padding-left: 3px;
padding-right: 3px;
}
.nav_current_item {
font-family: verdana;
font-size: 12px;
font-weight: bold;
color: #666666;
}
/* Edit forms */
.hint {
font-family: arial, helvetica, sans-serif;
font-size: 12px;
font-style: normal;
color: #666666;
}
.table-color1, .table-color2 {
font-family: verdana, arial;
font-size: 14px;
font-weight: normal;
color: #000000;
text-decoration: none;
}
.table-color1 { background-color: #F6F6F6; }
.table-color2 { background-color: #EBEBEB; }
.table_white, .table_white_selected {
font-family: verdana, arial;
font-weight: normal;
font-size: 14px;
color: #000000;
text-decoration: none;
padding-top: 0px;
padding-bottom: 0px;
}
.table_white {
background-color: #FFFFFF;
}
.table_white_selected {
background-color: #C6D6EF;
}
.subsectiontitle {
font-family: verdana, arial;
font-size: 14px;
font-weight: bold;
background-color: #999999;
text-decoration: none;
color: #FFFFFF;
}
.subsectiontitle a {
color: #ffffff;
}
.subsectiontitle a:hover {
color: #FFCC00;
}
/*.subsectiontitle:hover {
font-family: verdana, arial;
font-size: 14px;
font-weight: bold;
background-color: #999999;
text-decoration: none;
color: #FFCC00;
}*/
.error {
font-family: arial, helvetica, sans-serif;
font-weight: bold;
font-size: 9pt;
color: #FF0000;
}
/* Tabs */
.tab_border {
border: 1px solid #000000;
border-width: 1 0 0 0;
}
.tab, .tab:hover {
font-family: verdana, arial, helvetica;
font-size: 12px;
font-weight: bold;
color: #000000;
text-decoration: none;
}
.tab2, .tab2:hover {
font-family: verdana, arial, helvetica;
font-size: 12px;
font-weight: bold;
text-decoration: none;
}
.tab2 { color: #FFFFFF; }
.tab2:hover { color: #000000; }
/* Item DIVS */
.selected_div { background-color: #C6D6EF; }
.notselected_div { background-color: #FFFFFF; }
/* Item tabs */
.itemtab_active {
background: url("../img/itemtabs/tab_active.gif") #eee repeat-x;
}
.itemtab_inactive {
background: url("../img/itemtabs/tab_inactive.gif") #F9EEAE repeat-x;
}
/* Grids */
.columntitle, .columntitle:hover {
font-family: verdana, arial;
font-size: 14px;
font-weight: bold;
background-color: #999999;
text-decoration: none;
}
.columntitle { color: #FFFFFF; }
.columntitle:hover { color: #FFCC00; }
.columntitle_small, .columntitle_small:hover {
font-family: verdana, arial;
font-size: 12px;
font-weight: bold;
background-color: #999999;
text-decoration: none;
}
.columntitle_small { color: #FFFFFF; }
.columntitle_small:hover { color: #FFCC00; }
/* ----------------------------- */
.section_header_bg {
background: url(../img/logo_bg.gif) no-repeat top right;
}
.small {
font-size: 9px;
font-family: Verdana, Arial, Helvetica, sans-serif;
}
/* order preview & preview_print styles */
.order_print_defaults TD,
.order_preview_header,
.order_preview_header TD,
.order_print_preview_header TD,
.order_preview_field_name,
.order-totals-name,
.arial2r,
.orders_print_flat_table TD {
font-family: Arial;
font-size: 10pt;
}
.order_preview_header, .order_preview_header TD, .order_print_preview_header TD {
background-color: #C9E9FE;
font-weight: bold;
}
.order_print_preview_header TD {
background-color: #FFFFFF;
}
.order_preview_field_name {
font-weight: bold;
padding: 2px 4px 2px 4px;
}
.order-totals-name {
font-style: normal;
}
.border1 {
border: 1px solid #111111;
}
.arial2r {
color: #602830;
font-weight: bold;
}
.orders_flat_table, .orders_print_flat_table {
border-collapse: collapse;
margin: 5px;
}
.orders_flat_table TD {
padding: 2px 5px 2px 5px;
border: 1px solid #444444;
}
.orders_print_flat_table TD {
border: 1px solid #000000;
padding: 2px 5px 2px 5px;
}
.help_box {
padding: 5px 10px 5px 10px;
}
.progress_bar
{
background: url(../img/progress_bar_segment.gif);
}
.grid_id_cell TD {
padding-right: 2px;
}
/*.transparent {
filter: alpha(opacity=50);
-moz-opacity: .5;
opacity: .5;
}*/
.none_transparent {
}
.subitem_icon {
vertical-align: top;
padding-top: 0px;
text-align: center;
width: 28px;
}
.subitem_description {
vertical-align: middle;
}
.dLink, .dLink:hover {
display: block;
margin-bottom: 5px;
font-family: Verdana;
font-size: 13px;
font-weight: bold;
color: #2C73CB;
}
.dLink {
text-decoration: none;
}
.dLink:hover {
text-decoration: underline;
}
a.config-header, a.config-header:hover {
color: #FFFFFF;
font-size: 11px;
}
.catalog-tab-left {
background: url(../img/itemtabs/tab_left.gif) top left no-repeat;
}
.catalog-tab-middle {
background: url(../img/itemtabs/tab_middle.gif) top left repeat-x;
}
.catalog-tab-right {
background: url(../img/itemtabs/tab_right.gif) top right no-repeat;
}
catalog-tab-separator td {
background: #FFFFFF;
}
.catalog-tab-selected td {
background-color: #E0E0DA;
cursor: default;
}
.catalog-tab-unselected td, .catalog-tab-unselected td span {
background-color: #F0F1EB;
cursor: pointer;
}
.catalog-tab {
display: none;
width: 100%;
}
.progress-text {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
color: #414141;
}
.flat-input {
border: 1px solid grey;
}
/* Toolbar */
.toolbar-button, .toolbar-button-disabled, .toolbar-button-over {
float: left;
clear: none !important;
border: none;
text-align: center;
font-size: 10px;
padding: 3px 3px 3px 3px;
vertical-align: middle;
}
.toolbar-button-over {
}
/* Forms */
table.edit-form {
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
border: 1px solid #000000;
border-top-width: 0px;
border-collapse: collapse;
width: 100%;
}
table.edit-form td {
padding: 4px;
margin: 0px;
}
+
+/* Uploader */
+
+.uploader-main {
+ position: absolute;
+ display: none;
+ z-index: 10;
+ border: 1px solid #777;
+ padding: 10px;
+ width: 350px;
+ height: 120px;
+ overflow: hidden;
+ background-color: #fff;
+}
+
+.uploader-percent {
+ width: 100%;
+ padding-top: 3px;
+ text-align: center;
+ position: relative;
+ z-index: 20;
+ float: left;
+ font-weight: bold;
+}
+
+.uploader-left {
+ width: 100%;
+ border: 1px solid black;
+ height: 20px;
+ background: #fff url(../img/progress_left.gif);
+}
+
+.uploader-done {
+ width: 0%;
+ background-color: green;
+ height: 20px;
+ background: #4A92CE url(../img/progress_done.gif);
+}
+
+.uploader-text {
+ font-size: 11px;
+}
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/incs/style.css
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.8.2.1
\ No newline at end of property
+1.8.2.2
\ No newline at end of property
Index: branches/RC/core/admin_templates/incs/form_blocks.tpl
===================================================================
--- branches/RC/core/admin_templates/incs/form_blocks.tpl (revision 9333)
+++ branches/RC/core/admin_templates/incs/form_blocks.tpl (revision 9334)
@@ -1,631 +1,697 @@
<inp2:m_DefineElement name="combined_header" permission_type="view" module="">
<inp2:adm_SectionInfo section="$section" info="perm_section" result_to_var="perm_section"/>
<inp2:m_RequireLogin permissions="{$perm_section}.{$permission_type}" system="1"/>
<inp2:m_if check="m_Param" name="prefix" inverse="1"><inp2:adm_SectionInfo section="$section" info="SectionPrefix" result_to_var="prefix"/></inp2:m_if>
<inp2:m_if check="m_get" var="m_wid" inverse="1">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr style="background: url(<inp2:adm_SectionInfo section="$section" info="module_path" module="$module"/>img/logo_bg.gif) no-repeat top right; height: 55px;">
<td valign="top" class="admintitle" align="left" style="padding-top: 10px; padding-bottom: 10px;">
<img width="46" height="46" src="<inp2:adm_SectionInfo section="$section" info="module_path" module="$module"/>img/icons/icon46_<inp2:adm_SectionInfo section="$section" info="icon"/>.gif" align="absmiddle" title="<inp2:adm_SectionInfo section="$section" info="label"/>">&nbsp;<inp2:adm_SectionInfo section="$section" info="label"/>
</td>
</tr>
</table>
</inp2:m_if>
<inp2:m_if check="m_Param" name="tabs">
<inp2:m_include t="$tabs"/>
</inp2:m_if>
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td class="tablenav">
<table border="0" cellpadding="2" cellspacing="0" class="bordered-no-bottom" width="100%" height="30">
<tr>
<td class="header_left_bg" nowrap valign="middle">
<inp2:adm_SectionInfo section="$section" info="label" result_to_var="default_title"/>
<span class="tablenav_link" id="blue_bar"><inp2:{$prefix}_SectionTitle title_preset="$title_preset" title="$default_title" cut_first="100" pass_params="true"/></span>
</td>
<td align="right" valign="middle">
<script type="text/javascript">
set_window_title( RemoveTranslationLink(document.getElementById('blue_bar').innerHTML, false).replace(/(<[^<]+>)/g, '') + ' - <inp2:m_Phrase label="la_AdministrativeConsole"/>');
</script>
<inp2:m_if check="m_ModuleEnabled" module="In-Portal">
<script>
var $help_url='<inp2:m_t t="help" h_prefix="$prefix" h_icon="$icon" h_module="$module" h_title_preset="$title_preset" pass="all,m,h" m_opener="p" escape="escape"/>';
$help_url = $help_url.replace(/#/g, '%23');
</script>
<a href="javascript: OpenHelp($help_url);">
<img src="img/blue_bar_help.gif" border="0">
</a>
</inp2:m_if>
<inp2:m_if check="m_Param" name="pagination">
<inp2:m_RenderElement name="grid_pagination_elem" PrefixSpecial="$prefix" pass_params="1"/>
</inp2:m_if>
</td>
</tr>
</table>
</td>
</tr>
</table>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="section_header">
<inp2:m_if check="m_ParamEquals" name="prefix" value="" inverse="inverse">
<inp2:m_RenderElement name="section_header_new" pass_params="true"/>
<inp2:m_else />
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr class="section_header_bg">
<td valign="top" class="admintitle" align="left" style="padding-top: 2px; padding-bottom: 2px;">
<img width="46" height="46" src="img/icons/<inp2:adm_GetSectionIcon icon="$icon"/>.gif" align="absmiddle" title="<inp2:adm_GetSectionTitle phrase="$title"/>">&nbsp;<inp2:adm_GetSectionTitle phrase="$title"/>
</td>
</tr>
</table>
</inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="section_header_new" module="#session#">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr style="background: url(<inp2:ModulePath module="$module"/>img/logo_bg.gif) no-repeat top right; height: 55px;">
<td valign="top" class="admintitle" align="left" style="padding-top: 10px; padding-bottom: 10px;">
<img width="46" height="46" src="<inp2:ModulePath module="$module"/>img/icons/<inp2:adm_GetSectionIcon icon="$icon"/>.gif" align="absmiddle" title="<inp2:adm_GetSectionTitle phrase="$title"/>">&nbsp;<inp2:adm_GetSectionTitle phrase="$title"/>
</td>
</tr>
</table>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="blue_bar" module="" icon="" pagination="0">
<table border="0" cellpadding="2" cellspacing="0" class="bordered-no-bottom" width="100%" height="30">
<tr>
<td class="header_left_bg" nowrap width="80%" valign="middle">
<span class="tablenav_link" id="blue_bar"><inp2:{$prefix}_SectionTitle title_preset="$title_preset" title="Invalid OR Missing title preset [#preset_name#]" cut_first="100" pass_params="true"/></span>
</td>
<td align="right" class="tablenav" width="20%" valign="middle">
<inp2:m_if check="m_ModuleEnabled" module="In-Portal">
<script>
var $help_url='<inp2:m_t t="help" h_prefix="$prefix" h_icon="$icon" h_module="$module" h_title_preset="$title_preset" pass="all,m,h" m_opener="p" escape="escape"/>';
$help_url = $help_url.replace(/#/g, '%23');
set_window_title( RemoveTranslationLink(document.getElementById('blue_bar').innerHTML, false).replace(/(<[^<]+>)/g, '') );
</script>
<a href="javascript: OpenHelp($help_url);">
<img src="img/blue_bar_help.gif" border="0">
</a>
</inp2:m_if>
<inp2:m_if check="m_Param" name="pagination">
<inp2:m_RenderElement name="grid_pagination_elem" grid="st" PrefixSpecial="$prefix" pass_params="1"/>
</inp2:m_if>
</td>
</tr>
</table>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_original_label">
<td><inp2:$prefix.original_Field field="$field" nl2br="1"/></td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="subsection" prefix="">
<tr class="subsectiontitle">
<td colspan="3"><inp2:m_phrase label="$title"/></td>
<inp2:m_if check="m_ParamEquals" name="prefix" value="" inverse="inverse">
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<td><inp2:m_phrase name="$original_title"/></td>
</inp2:m_if>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_field_caption" title="" subfield="" NamePrefix="">
<inp2:m_inc param="tab_index" by="1"/>
<td class="text">
<inp2:m_if check="m_Param" name="title">
<label for="<inp2:m_param name="NamePrefix"/><inp2:InputName field="$field" subfield="$subfield"/>">
<span class="<inp2:m_if check="HasError" field="$field" >error</inp2:m_if>">
<inp2:m_phrase label="$title"/></span><inp2:m_if check="{$prefix}_IsRequired" field="$field" ><span class="error">&nbsp;*</span></inp2:m_if>:
</label>
<inp2:m_else/>
&nbsp;
</inp2:m_if>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_label" is_last="" as_label="" currency="" is_last="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td valign="top"><span class="text"><inp2:{$prefix}_Field field="$field" as_label="$as_label" currency="$currency"/></span></td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_id_label" db="">
<inp2:m_if check="{$prefix}_FieldEquals" field="$field" value="" inverse="inverse">
<inp2:m_RenderElement name="inp_label" pass_params="true"/>
</inp2:m_if>
<input type="hidden" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field" db="$db"/>">
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_box" subfield="" class="" is_last="" maxlength="" onblur="" size="" onkeyup="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" subfield="$subfield" title="$title" is_last="$is_last"/>
<td>
<input type="text" name="<inp2:{$prefix}_InputName field="$field" subfield="$subfield"/>" id="<inp2:{$prefix}_InputName field="$field" subfield="$subfield"/>" value="<inp2:{$prefix}_Field field="$field" subfield="$subfield"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>" onkeyup="<inp2:m_Param name="onkeyup"/>">
<inp2:m_if check="{$prefix}_HasParam" name="hint_label"><span class="small"><inp2:m_phrase label="$hint_label"/></span></inp2:m_if>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_password" class="" size="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title"/>
<td>
<input type="password" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" value="" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" />
<inp2:m_if check="{$prefix}_HasParam" name="hint_label"><span class="small"><inp2:m_phrase label="$hint_label"/></span></inp2:m_if>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_upload" class="" size="" thumbnail="" is_last="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<inp2:m_if check="m_Param" name="thumbnail">
- <table cellspacing="0" cellpadding="0">
- <inp2:m_if check="{$prefix}_FieldEquals" name="$field" value="" inverse="inverse">
+ <inp2:m_if check="{$prefix}_FieldEquals" name="$field" value="" inverse="inverse">
+ <img src="<inp2:{$prefix}_Field field="$field" format="resize:{$thumbnail}"/>" alt=""/><br />
+ <table cellpadding="0" cellspacing="0">
<tr>
<td>
- <img src="<inp2:{$prefix}_Field field="$field" format="resize:{$thumbnail}"/>" alt=""/><br />
+ <input type="hidden" id="<inp2:{$prefix}_InputName field="Delete{$field}"/>" name="<inp2:{$prefix}_InputName field="Delete{$field}"/>" value="0" />
+ <input type="checkbox" id="_cb_<inp2:{$prefix}_InputName field="Delete{$field}"/>" onchange="update_checkbox(this, document.getElementById('<inp2:{$prefix}_InputName field="Delete{$field}"/>'));">
</td>
- </tr>
- <tr>
<td>
- <img src="img/spacer.gif" width="1" height="5" alt=""/>
+ <label for="_cb_<inp2:{$prefix}_InputName field="Delete{$field}"/>"><inp2:m_phrase name="la_btn_DeleteImage"/></label>
</td>
</tr>
- </inp2:m_if>
- <tr>
- <td>
- <input type="file" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>">
- </td>
- </tr>
- </table>
+ </table>
+ </inp2:m_if>
+ <input type="file" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>">
<inp2:m_else/>
<input type="file" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>">
<inp2:m_if check="{$prefix}_FieldEquals" name="$field" value="" inverse="inverse">
(<inp2:{$prefix}_Field field="$field"/>)
</inp2:m_if>
</inp2:m_if>
<input type="hidden" name="<inp2:{$prefix}_InputName field="$field"/>[upload]" id="<inp2:{$prefix}_InputName field="$field"/>[upload]" value="<inp2:{$prefix}_Field field="$field"/>">
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
-<inp2:m_DefineElement name="inp_edit_box_ml" class="" size="" maxlength="">
+<inp2:m_DefineElement name="inp_edit_swf_upload" class="" is_last="" style="">
+ <tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
+ <inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
+ <td class="uploader-text">
+ <div class="uploader-main" id="<inp2:{$prefix}_InputName field="$field"/>_progress">
+ <div class="uploader-percent" id="<inp2:{$prefix}_InputName field="$field"/>_percent">0%</div>
+ <div class="uploader-left">
+ <div class="uploader-done" id="<inp2:{$prefix}_InputName field="$field"/>_done"></div>
+ </div>
+ <table style="border-collapse: collapse; width: 100%;">
+ <tr>
+ <td style="width: 120px">Uploading:</td><td id="<inp2:{$prefix}_InputName field="$field"/>_progress_filename"></td>
+ </tr>
+ <tr>
+ <td>Progress:</td><td id="<inp2:{$prefix}_InputName field="$field"/>_progress_progress"></td>
+ </tr>
+ <tr>
+ <td>Time elapsed:</td><td id="<inp2:{$prefix}_InputName field="$field"/>_progress_elapsed"></td>
+ </tr>
+ <tr>
+ <td>Time remaining:</td><td id="<inp2:{$prefix}_InputName field="$field"/>_progress_remaining"></td>
+ </tr>
+ <tr>
+ <td colspan="2" style="text-align: center"><a href="javascript:UploadsManager.CancelUpload('<inp2:{$prefix}_InputName field="$field"/>')">Cancel</a></td>
+ </tr>
+ </table>
+ </div>
+
+ <div>
+ <input class="button" type="button" onclick="UploadsManager.Browse('<inp2:{$prefix}_InputName field="$field"/>')" value="Browse"/>
+ <input class="button" type="button" onclick="UploadsManager.StartUpload('<inp2:{$prefix}_InputName field="$field"/>')" value="Upload"/>
+ </div>
+
+ <div id="<inp2:{$prefix}_InputName field="$field"/>_queueinfo"></div>
+ <div id="<inp2:{$prefix}_InputName field="$field"/>_holder"></div>
+
+ <input type="hidden" name="<inp2:{$prefix}_InputName field="$field"/>[upload]" id="<inp2:{$prefix}_InputName field="$field"/>[upload]" value="<inp2:{$prefix}_Field field="$field"/>"><br/>
+ <input type="hidden" name="<inp2:{$prefix}_InputName field="$field"/>[tmp_ids]" id="<inp2:{$prefix}_InputName field="$field"/>[tmp_ids]" value="">
+ <input type="hidden" name="<inp2:{$prefix}_InputName field="$field"/>[tmp_names]" id="<inp2:{$prefix}_InputName field="$field"/>[tmp_names]" value="">
+ <input type="hidden" name="<inp2:{$prefix}_InputName field="$field"/>[tmp_deleted]" id="<inp2:{$prefix}_InputName field="$field"/>[tmp_deleted]" value="">
+
+ <script type="text/javascript">
+ UploadsManager.AddUploader('<inp2:{$prefix}_InputName field="$field"/>',
+ {
+ allowedFiletypesDescription : '<inp2:{$prefix}_FieldOption field="$field" option="files_description" js_escape="1"/>',
+ allowedFiletypes : '<inp2:{$prefix}_FieldOption field="$field" option="file_types"/>',
+ allowedFilesize : '<inp2:{$prefix}_FieldOption field="$field" option="max_size"/>',
+ multiple : '<inp2:{$prefix}_FieldOption field="$field" option="multiple"/>',
+ prefix : '<inp2:m_Param name="prefix"/>',
+ field : '<inp2:m_Param name="field"/>',
+ urls : '<inp2:{$prefix}_Field field="$field" format="file_urls" js_escape="1"/>',
+ names : '<inp2:{$prefix}_Field field="$field" format="file_names" js_escape="1"/>',
+ sizes : '<inp2:{$prefix}_Field field="$field" format="file_sizes" js_escape="1"/>',
+ flashsid : '<inp2:m_SID/>',
+ uploadURL : '<inp2:m_t pass="m,$prefix" {$prefix}_event="OnUploadFile" field="#FIELD#" id="#ID#" flashsid="#SID#" js_escape="1" no_amp="1" />',
+ deleteURL : '<inp2:m_t pass="m,$prefix" {$prefix}_event="OnDeleteFile" field="#FIELD#" file="#FILE#" js_escape="1" no_amp="1"/>',
+ tmp_url : '<inp2:m_t pass="m,$prefix" {$prefix}_event="OnViewFile" tmp="1" field="#FIELD#" file="#FILE#" id="#ID#" js_escape="1" no_amp="1" />',
+ IconPath: '../../admin/editor/cmseditor/editor/images'
+ }
+ )
+ </script>
+
+ </td>
+ <td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
+ <inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
+ <inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
+ </inp2:m_if>
+ </tr>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="inp_edit_box_ml" class="" size="" onblur="" maxlength="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text" valign="top">
<span class="<inp2:m_if check="{$prefix}_HasError" field="$field" >error</inp2:m_if>">
<inp2:m_phrase label="$title"/><inp2:m_if check="{$prefix}_IsRequired" field="$field" ><span class="error"> *</span></inp2:m_if>:</span><br>
<a href="javascript:PreSaveAndOpenTranslator('<inp2:m_param name="prefix"/>', '<inp2:m_param name="field"/>', 'popups/translator');" title="<inp2:m_Phrase label="la_Translate"/>"><img src="img/icons/icon24_translate.gif" style="cursor:hand" border="0"></a>
</td>
<td>
<input type="text" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field" format="no_default"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_hidden" db="">
<input type="hidden" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field" db="$db"/>">
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_date" class="" is_last="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<input type="text" name="<inp2:{$prefix}_InputName field="{$field}_date"/>" id="<inp2:{$prefix}_InputName field="{$field}_date"/>" value="<inp2:{$prefix}_Field field="{$field}_date" format="_regional_InputDateFormat"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:{$prefix}_Format field="{$field}_date" input_format="1" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>" datepickerIcon="<inp2:m_ProjectBase/>core/admin_templates/img/calendar_icon.gif">&nbsp;<span class="small">(<inp2:{$prefix}_Format field="{$field}_date" input_format="1" human="true"/>)</span>
<script type="text/javascript">
initCalendar("<inp2:{$prefix}_InputName field="{$field}_date"/>", "<inp2:{$prefix}_Format field="{$field}_date" input_format="1"/>");
</script>
<input type="hidden" name="<inp2:{$prefix}_InputName field="{$field}_time"/>" id="<inp2:{$prefix}_InputName field="{$field}_time" input_format="1"/>" value="">
</td>
<td class="error"><inp2:{$prefix}_Error field="{$field}_date"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_time" class="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td class="control-cell">
<input type="text" name="<inp2:{$prefix}_InputName field="{$field}_time"/>" id="<inp2:{$prefix}_InputName field="{$field}_time"/>" value="<inp2:{$prefix}_Field field="{$field}_time" format="_regional_InputTimeFormat"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:{$prefix}_Format field="{$field}_time" input_format="1" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>">&nbsp;
<span class="small">(<inp2:{$prefix}_Format field="{$field}_time" input_format="1" human="true"/>)</span>
<input type="hidden" name="<inp2:{$prefix}_InputName field="{$field}_date"/>" id="<inp2:{$prefix}_InputName field="{$field}_date" input_format="1"/>" value="">
</td>
<td class="error"><inp2:{$prefix}_Error field="{$field}_time"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_date_time" class="" is_last="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<!-- <input type="hidden" id="<inp2:{$prefix}_InputName field="$field"/>" name="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field" db="db"/>"> -->
<input type="text" name="<inp2:{$prefix}_InputName field="{$field}_date"/>" id="<inp2:{$prefix}_InputName field="{$field}_date"/>" value="<inp2:{$prefix}_Field field="{$field}_date" format="_regional_InputDateFormat"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:{$prefix}_Format field="{$field}_date" input_format="1" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>" datepickerIcon="<inp2:m_ProjectBase/>core/admin_templates/img/calendar_icon.gif">
<span class="small">(<inp2:{$prefix}_Format field="{$field}_date" input_format="1" human="true"/>)</span>
<script type="text/javascript">
initCalendar("<inp2:{$prefix}_InputName field="{$field}_date"/>", "<inp2:{$prefix}_Format field="{$field}_date" input_format="1"/>");
</script>
&nbsp;<input type="text" name="<inp2:{$prefix}_InputName field="{$field}_time"/>" id="<inp2:{$prefix}_InputName field="{$field}_time"/>" value="<inp2:{$prefix}_Field field="{$field}_time" format="_regional_InputTimeFormat"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:{$prefix}_Format field="{$field}_time" input_format="1" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>"><span class="small"> (<inp2:{$prefix}_Format field="{$field}_time" input_format="1" human="true"/>)</span>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_textarea" class="" allow_html="allow_html">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text" valign="top">
<span class="<inp2:m_if check="{$prefix}_HasError" field="$field" >error</inp2:m_if>">
<inp2:m_phrase label="$title"/><inp2:m_if check="{$prefix}_IsRequired" field="$field" ><span class="error"> *</span></inp2:m_if>:</span><br>
<inp2:m_if check="m_ParamEquals" name="allow_html" value="allow_html">
<a href="javascript:OpenEditor('&section=in-link:editlink_general','kernel_form','<inp2:{$prefix}_InputName field="$field"/>');"><img src="img/icons/icon24_link_editor.gif" style="cursor:hand" border="0"></a>
</inp2:m_if>
</td>
<td>
<textarea tabindex="<inp2:m_get param="tab_index"/>" id="<inp2:{$prefix}_InputName field="$field"/>" name="<inp2:{$prefix}_InputName field="$field"/>" cols="<inp2:m_param name="cols"/>" rows="<inp2:m_param name="rows"/>" class="<inp2:m_param name="class"/>"><inp2:{$prefix}_Field field="$field"/></textarea>
<inp2:m_if check="{$prefix}_HasParam" name="hint_label">
<br /><span class="small"><inp2:m_phrase label="$hint_label"/></span>
</inp2:m_if>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_textarea_ml" class="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text" valign="top">
<span class="<inp2:m_if check="{$prefix}_HasError" field="$field" >error</inp2:m_if>">
<inp2:m_phrase label="$title"/><inp2:m_if check="{$prefix}_IsRequired" field="$field" ><span class="error"> *</span></inp2:m_if>:</span><br>
<a href="javascript:OpenEditor('&section=in-link:editlink_general','kernel_form','<inp2:{$prefix}_InputName field="$field"/>');"><img src="img/icons/icon24_link_editor.gif" style="cursor:hand" border="0"></a>
<a href="javascript:PreSaveAndOpenTranslator('<inp2:m_param name="prefix"/>', '<inp2:m_param name="field"/>', 'popups/translator', 1);" title="<inp2:m_Phrase label="la_Translate"/>"><img src="img/icons/icon24_translate.gif" style="cursor:hand" border="0"></a>
</td>
<td>
<textarea tabindex="<inp2:m_get param="tab_index"/>" id="<inp2:{$prefix}_InputName field="$field"/>" name="<inp2:{$prefix}_InputName field="$field"/>" cols="<inp2:m_param name="cols"/>" rows="<inp2:m_param name="rows"/>" class="<inp2:m_param name="class"/>"><inp2:{$prefix}_Field field="$field"/></textarea>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_user" class="" size="" is_last="" old_style="0" onkeyup="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<input type="text" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onkeyup="<inp2:m_Param name="onkeyup"/>">
<inp2:m_if check="m_ParamEquals" name="old_style" value="1">
<a href="#" onclick="return OpenUserSelector('','kernel_form','<inp2:{$prefix}_InputName field="$field"/>');">
<inp2:m_else/>
<a href="javascript:openSelector('<inp2:m_param name="prefix"/>', '<inp2:m_t t="user_selector" pass="all,$prefix" escape="1"/>', '<inp2:m_param name="field"/>');">
</inp2:m_if>
<img src="img/icons/icon24_link_user.gif" style="cursor:hand;" border="0">
</a>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_category" class="" size="" is_last="" old_style="0" onkeyup="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<table cellpadding="0" cellspacing="0">
<tr>
<td>
<inp2:m_DefineElement name="category_caption">
<inp2:m_if check="m_ParamEquals" name="cat_id" value="0" inverse="inverse">
<inp2:m_param name="separator"/>
</inp2:m_if>
<inp2:m_param name="cat_name"/>
</inp2:m_DefineElement>
<inp2:$prefix_FieldCategoryPath field="$field" separator=" &gt; " render_as="category_caption"/>
<inp2:m_RenderElement name="inp_edit_hidden" pass_params="1"/>
</td>
<td>
<img src="img/spacer.gif" width="3" height="1" alt=""/>
<a href="javascript:openSelector('<inp2:m_param name="prefix"/>', '<inp2:adm_SelectorLink prefix="$prefix" selection_mode="single" tab_prefixes="none"/>', '<inp2:m_param name="field"/>');">
<img src="img/icons/icon24_cat.gif" border="0"/>
</a>
</td>
</tr>
</table>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_option_item">
<option value="<inp2:m_param name="key"/>"<inp2:m_param name="selected"/>><inp2:m_param name="option"/></option>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_option_phrase">
<option value="<inp2:m_param name="key"/>"<inp2:m_param name="selected"/>><inp2:m_phrase label="$option"/></option>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_options" is_last="" has_empty="0" empty_value="" onchange="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<select tabindex="<inp2:m_get param="tab_index"/>" name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>" onchange="<inp2:m_Param name="onchange"/>">
<inp2:m_if check="m_ParamEquals" name="use_phrases" value="1" >
<inp2:{$prefix}_PredefinedOptions field="$field" block="inp_option_phrase" selected="selected" has_empty="$has_empty" empty_value="$empty_value"/>
<inp2:m_else/>
<inp2:{$prefix}_PredefinedOptions field="$field" block="inp_option_item" selected="selected" has_empty="$has_empty" empty_value="$empty_value"/>
</inp2:m_if>
</select>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_multioptions" is_last="" has_empty="0" empty_value="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<select multiple tabindex="<inp2:m_get param="tab_index"/>" id="<inp2:{$prefix}_InputName field="$field"/>_select" onchange="update_multiple_options('<inp2:{$prefix}_InputName field="$field"/>');">
<inp2:m_if check="m_ParamEquals" name="use_phrases" value="1" >
<inp2:{$prefix}_PredefinedOptions field="$field" block="inp_option_phrase" selected="selected" has_empty="$has_empty" empty_value="$empty_value"/>
<inp2:m_else/>
<inp2:{$prefix}_PredefinedOptions field="$field" block="inp_option_item" selected="selected" has_empty="$has_empty" empty_value="$empty_value"/>
</inp2:m_if>
</select>
<input type="hidden" id="<inp2:{$prefix}_InputName field="$field"/>" name="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field"/>"/>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_radio_item" onclick="" onchange="">
<input type="radio" <inp2:m_param name="checked"/> name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>_<inp2:m_param name="key"/>" value="<inp2:m_param name="key"/>" onclick="<inp2:m_param name="onclick"/>" onchange="<inp2:m_param name="onchange"/>"><label for="<inp2:{$prefix}_InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_param name="option"/></label>&nbsp;
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_radio_phrase" onclick="" onchange="">
<input type="radio" <inp2:m_param name="checked"/> name="<inp2:{$prefix}_InputName field="$field"/>" id="<inp2:{$prefix}_InputName field="$field"/>_<inp2:m_param name="key"/>" value="<inp2:m_param name="key"/>" onclick="<inp2:m_param name="onclick"/>" onchange="<inp2:m_param name="onchange"/>"><label for="<inp2:{$prefix}_InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_phrase label="$option"/></label>&nbsp;
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_radio" is_last="" pass_tabindex="" onclick="" onchange="" use_phrases="1">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<inp2:m_if check="m_ParamEquals" name="use_phrases" value="1">
<inp2:{$prefix}_PredefinedOptions field="$field" tabindex="$pass_tabindex" block="inp_radio_phrase" selected="checked" onclick="$onclick" onchange="$onchange" />
<inp2:m_else />
<inp2:{$prefix}_PredefinedOptions field="$field" tabindex="$pass_tabindex" block="inp_radio_item" selected="checked" onclick="$onclick" onchange="$onchange" />
</inp2:m_if>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_checkbox" is_last="" field_class="" onchange="" onclick="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last" NamePrefix="_cb_"/>
<td>
<input type="hidden" id="<inp2:{$prefix}_InputName field="$field"/>" name="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field" db="db"/>">
<!--<input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:{$prefix}_InputName field="$field"/>" name="_cb_<inp2:{$prefix}_InputName field="$field"/>" <inp2:{$prefix}_Field field="$field" checked="checked" db="db"/> class="<inp2:m_param name="field_class"/>" onclick="update_checkbox(this, document.getElementById('<inp2:{$prefix}_InputName field="$field"/>'));" onchange="<inp2:m_param name="onchange"/>">-->
<input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:{$prefix}_InputName field="$field"/>" name="_cb_<inp2:{$prefix}_InputName field="$field"/>" <inp2:{$prefix}_Field field="$field" checked="checked" db="db"/> class="<inp2:m_param name="field_class"/>" onchange="update_checkbox(this, document.getElementById('<inp2:{$prefix}_InputName field="$field"/>'));<inp2:m_param name="onchange"/>" onclick="<inp2:m_param name="onclick"/>">
<inp2:m_if check="{$prefix}_HasParam" name="hint_label"><inp2:m_phrase label="$hint_label"/></inp2:m_if>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_checkbox_item">
<input type="checkbox" <inp2:m_param name="checked"/> id="<inp2:{$prefix}_InputName field="$field"/>_<inp2:m_param name="key"/>" value="<inp2:m_param name="key"/>" onclick="update_checkbox_options(/^<inp2:{$prefix}_InputName field="$field" as_preg="1"/>_([0-9A-Za-z-]+)/, '<inp2:{$prefix}_InputName field="$field"/>');"><label for="<inp2:{$prefix}_InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_param name="option"/></label>&nbsp;
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_checkbox_phrase">
<input type="checkbox" <inp2:m_param name="checked"/> id="<inp2:{$prefix}_InputName field="$field"/>_<inp2:m_param name="key"/>" value="<inp2:m_param name="key"/>" onclick="update_checkbox_options(/^<inp2:{$prefix}_InputName field="$field" as_preg="1"/>_([0-9A-Za-z-]+)/, '<inp2:{$prefix}_InputName field="$field"/>');"><label for="<inp2:{$prefix}_InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_phrase label="$option"/></label>&nbsp;
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_checkboxes" is_last="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title" is_last="$is_last"/>
<td>
<inp2:m_if check="m_ParamEquals" name="use_phrases" value="1">
<inp2:{$prefix}_PredefinedOptions field="$field" no_empty="$no_empty" tabindex="$pass_tabindex" hint_label="$hint_label" block="inp_checkbox_phrase" selected="checked"/>
<inp2:m_else/>
<inp2:{$prefix}_PredefinedOptions field="$field" no_empty="$no_empty" tabindex="$pass_tabindex" hint_label="$hint_label" block="inp_checkbox_item" selected="checked"/>
</inp2:m_if>
<inp2:m_RenderElement prefix="$prefix" name="inp_edit_hidden" field="$field"/>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_checkbox_allow_html">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td colspan="2">
<label for="_cb_<inp2:m_param name="field"/>"><inp2:m_phrase label="la_enable_html"/></label>
<input type="hidden" id="<inp2:{$prefix}_InputName field="$field"/>" name="<inp2:{$prefix}_InputName field="$field"/>" value="<inp2:{$prefix}_Field field="$field"/>">
<input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:m_param name="field"/>" name="_cb_<inp2:m_param name="field"/>" <inp2:{$prefix}_Field field="$field" checked="checked"/> class="<inp2:m_param name="field_class"/>" onclick="update_checkbox(this, document.getElementById('<inp2:{$prefix}_InputName field="$field"/>'))">
<br>
<span class="hint"><img src="img/smicon7.gif" width="14" height="14" align="absmiddle"><inp2:m_phrase label="la_Warning_Enable_HTML"/></span>
</td>
<td>&nbsp;</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="inp_edit_weight" subfield="" class="" is_last="" maxlength="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" subfield="$subfield" title="$title" is_last="$is_last"/>
<td>
<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="1">
<input type="text" name="<inp2:{$prefix}_InputName field="$field" subfield="$subfield"/>" id="<inp2:{$prefix}_InputName field="$field" subfield="$subfield"/>" value="<inp2:{$prefix}_Field field="$field" subfield="$subfield"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
<inp2:m_phrase label="la_kg" />
</inp2:m_if>
<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="2">
<input type="text" name="<inp2:{$prefix}_InputName field="{$field}_a" subfield="$subfield"/>" id="<inp2:{$prefix}_InputName field="{$field}_a" subfield="$subfield"/>" value="<inp2:{$prefix}_Field field="{$field}_a" subfield="$subfield"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
<inp2:m_phrase label="la_lbs" />
<input type="text" name="<inp2:{$prefix}_InputName field="{$field}_b" subfield="$subfield"/>" id="<inp2:{$prefix}_InputName field="{$field}_b" subfield="$subfield"/>" value="<inp2:{$prefix}_Field field="{$field}_b" subfield="$subfield"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
<inp2:m_phrase label="la_oz" />
</inp2:m_if>
</td>
<td class="error"><inp2:{$prefix}_Error field="$field"/>&nbsp;</td>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">
<inp2:m_RenderElement prefix="$prefix" field="$field" name="inp_original_label"/>
</inp2:m_if>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="ajax_progress_bar">
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="bordered">
<tr class="table-color1">
<td colspan="2">
<img src="img/spacer.gif" height="10" width="1" alt="" /><br />
<!-- progress bar paddings: begin -->
<table width="90%" cellpadding="2" cellspacing="0" border="0" align="center">
<tr>
<td class="progress-text">0%</td>
<td width="100%">
<!-- progress bar: begin -->
<table cellspacing="0" cellpadding="0" width="100%" border="0" align="center" style="background-color: #FFFFFF; border: 1px solid #E6E6E6;">
<tr>
<td colspan="3"><img src="img/spacer.gif" height="2" width="1" alt="" /></td>
</tr>
<tr>
<td width="2"><img src="img/spacer.gif" height="13" width="3" alt="" /></td>
<td align="center" width="100%">
<table cellspacing="0" cellpadding="0" width="100%" border="0" style="background: url(img/progress_left.gif) repeat-x;">
<tr>
<td id="progress_bar[done]" style="background: url(img/progress_done.gif);" align="left"></td>
<td id="progress_bar[left]" align="right"><img src="img/spacer.gif" height="9" width="1" alt="" /></td>
</tr>
</table>
</td>
<td width="1"><img src="img/spacer.gif" height="13" width="3" alt="" /></td>
</tr>
<tr>
<td colspan="3"><img src="img/spacer.gif" height="2" width="1" alt="" /></td>
</tr>
</table>
<!-- progress bar: end -->
</td>
<td class="progress-text">100%</td>
</tr>
</table>
<!-- progress bar paddings: end -->
<img src="img/spacer.gif" height="10" width="1" alt="" /><br />
</td>
</tr>
<tr class="table-color2">
<td width="50%" align="right"><inp2:m_phrase name="la_fld_PercentsCompleted"/>:</td>
<td id="progress_display[percents_completed]">0%</td>
</tr>
<tr class="table-color1">
<td align="right"><inp2:m_phrase name="la_fld_ElapsedTime"/>:</td>
<td id="progress_display[elapsed_time]">00:00</td>
</tr>
<tr class="table-color2">
<td align="right"><inp2:m_phrase name="la_fld_EstimatedTime"/>:</td>
<td id="progress_display[Estimated_time]">00:00</td>
</tr>
<tr class="table-color1">
<td align="center" colspan="2">
<input type="button" class="button" onclick="<inp2:m_param name="cancel_action"/>" value="<inp2:m_phrase name="la_Cancel"/>" />
</td>
</tr>
</table>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="edit_navigation" toolbar="a_toolbar">
<inp2:m_if check="{$prefix}_IsTopmostPrefix">
<inp2:m_if check="{$prefix}_IsSingle">
<inp2:m_param name="toolbar"/>.HideButton('prev');
<inp2:m_param name="toolbar"/>.HideButton('next');
<inp2:m_else/>
<inp2:m_if check="{$prefix}_IsLast">
<inp2:m_param name="toolbar"/>.DisableButton('next');
</inp2:m_if>
<inp2:m_if check="{$prefix}_IsFirst">
<inp2:m_param name="toolbar"/>.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
</inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="edit_tabs">
<inp2:m_if check="{$prefix}_HasEditTabs" preset_name="Default">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td align="right" width="100%">
<table cellpadding="0" cellspacing="0" border="0" height="23">
<tr>
<inp2:m_DefineElement name="edit_tab">
<inp2:m_RenderElement name="tab" title="$title" t="$template" main_prefix="$PrefixSpecial"/>
</inp2:m_DefineElement>
<inp2:{$prefix}_PrintEditTabs render_as="edit_tab" preset_name="Default"/>
</tr>
</table>
</td>
</tr>
</table>
</inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="ml_selector" prefix="">
</inp2:m_DefineElement>
Property changes on: branches/RC/core/admin_templates/incs/form_blocks.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.20.2.4
\ No newline at end of property
+1.20.2.5
\ No newline at end of property

Event Timeline