Index: trunk/kernel/units/languages/languages_config.php =================================================================== --- trunk/kernel/units/languages/languages_config.php (revision 1765) +++ trunk/kernel/units/languages/languages_config.php (revision 1766) @@ -1,141 +1,146 @@ <?php $config = Array( 'Prefix' => 'lang', 'ItemClass' => Array('class'=>'LanguagesItem','file'=>'languages_item.php','build_event'=>'OnItemBuild'), 'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'), 'EventHandlerClass' => Array('class'=>'LanguagesEventHandler','file'=>'languages_event_handler.php','build_event'=>'OnBuild'), 'TagProcessorClass' => Array('class'=>'LanguagesTagProcessor','file'=>'languages_tag_processor.php','build_event'=>'OnBuild'), - 'RegisterClasses' => Array( Array('pseudo'=>'LangXML','class'=>'LangXML_Parser','file'=>'import_xml.php'), ), - + /*'AggregateTags' => Array( + Array( + 'AggregateTo' => 'm', + 'AggregatedTagName' => 'IsMetricUnits', + 'LocalTagName' => 'Main_IsMetricUnits', + ), + ), */ 'AutoLoad' => true, 'Hooks' => Array( Array( 'Mode' => hAFTER, 'Conditional' => false, 'HookToPrefix' => 'lang', 'HookToSpecial' => '', 'HookToEvent' => Array('OnSave'), 'DoPrefix' => '', 'DoSpecial' => '', 'DoEvent' => 'OnReflectMultiLingualFields', ), Array( 'Mode' => hAFTER, 'Conditional' => false, 'HookToPrefix' => 'lang', 'HookToSpecial' => '', 'HookToEvent' => Array('OnPreSave'), 'DoPrefix' => '', 'DoSpecial' => '', 'DoEvent' => 'OnCopyLabels', ), ), 'QueryString' => Array( 1 => 'id', 2 => 'page', 3 => 'event', 4 => 'mode', ), 'IDField' => 'LanguageId', 'StatusField' => Array('Enabled','PrimaryLang'), // field, that is affected by Approve/Decline events 'TitleField' => 'PackName', // field, used in bluebar when editing existing item 'TitlePresets' => Array( 'default' => Array( 'new_status_labels' => Array('lang'=>'!la_title_Adding_Language!'), 'edit_status_labels' => Array('lang'=>'!la_title_Editing_Language!'), 'new_titlefield' => Array('lang'=>'!la_title_New_Language!'), ), 'languages_list' => Array( 'prefixes' => Array('lang_List'), 'format' => "!la_title_Configuration! - !la_title_LanguagePacks! (#lang_recordcount#)"), 'languages_edit_general' => Array( 'prefixes' => Array('lang'), 'format' => "#lang_status# '#lang_titlefield#' - !la_title_General!"), 'phrases_list' => Array( 'prefixes' => Array('lang','phrases_List'), 'format' => "#lang_status# '#lang_titlefield#' - !la_title_Labels! (#phrases_recordcount#)"), 'import_language' => Array( 'prefixes' => Array('phrases.import'), 'format' => "!la_title_InstallLanguagePackStep1!"), 'import_language_step2' => Array( 'prefixes' => Array('phrases.import'), 'format' => "!la_title_InstallLanguagePackStep2!"), 'export_language' => Array( 'prefixes' => Array('phrases.export'), 'format' => "!la_title_ExportLanguagePackStep1!"), 'export_language_results' => Array( 'prefixes' => Array('phrases.export'), 'format' => "!la_title_ExportLanguagePackResults!"), 'events_list' => Array( 'prefixes' => Array('lang','emailevents_List'), 'format' => "#lang_status# '#lang_titlefield#' - !la_title_EmailEvents! (#emailevents_recordcount#)"), 'event_edit' => Array( 'prefixes' => Array('emailevents'), 'edit_status_labels' => Array('emailevents' => '!la_title_Editing_EmailEvent!'), 'format' => '#emailevents_status# - #emailevents_titlefield#'), 'email_messages_edit' => Array( 'prefixes' => Array('lang','emailmessages'), 'new_titlefield' => Array('emailmessages' => '!la_NoSubject!'), 'format' => "#lang_status# '#lang_titlefield#' - !la_title_EditingEmailEvent! '#emailmessages_titlefield#'"), ), 'TableName' => TABLE_PREFIX.'Language', 'SubItems' => Array('phrases','emailmessages'), 'FilterMenu' => Array( 'Groups' => Array( Array('mode' => 'AND', 'filters' => Array(0,1), 'type' => WHERE_FILTER), ), 'Filters' => Array( 0 => Array('label' =>'la_Enabled', 'on_sql' => '', 'off_sql' => '%1$s.Enabled != 1' ), 1 => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Enabled != 0' ), ) ), 'AutoDelete' => true, 'AutoClone' => true, 'ListSQLs' => Array( ''=>'SELECT * FROM %s', ), // key - special, value - list select sql 'ItemSQLs' => Array( ''=>'SELECT * FROM %s', ), 'ListSortings' => Array( '' => Array( 'Sorting' => Array('PackName' => 'asc'), ) ), 'Fields' => Array( 'LanguageId' => Array(), 'PackName' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'LocalName' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'Enabled' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array(0 => 'la_Disabled', 1 => 'la_Enabled'), 'use_phrases' => 1, 'not_null' => '1', 'default' => '0'), 'PrimaryLang' => Array('type' => 'int','not_null' => '1','default' => '0'), 'IconURL' => Array('type' => 'string','default' => ''), 'DateFormat' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'TimeFormat' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'DecimalPoint' => Array('type' => 'string','not_null' => '1','default' => '.'), 'ThousandSep' => Array('type' => 'string','not_null' => '1','default' => ','), 'Charset' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'UnitSystem' => Array('type' => 'int','not_null' => '1','default' => '1','formatter' => 'kOptionsFormatter','options' => Array(1 => 'la_Metric', 2 => 'la_US_UK'),'use_phrases' => 1), ), 'VirtualFields' => Array( 'CopyLabels' => Array('type' => 'int', 'default' => 0), 'CopyFromLanguage' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'Language ORDER BY PackName', 'option_title_field' => 'PackName', 'option_key_field' => 'LanguageId'), ), 'Grids' => Array( 'Default' => Array( 'Icons' => Array('default'=>'icon16_custom.gif','0_0'=>'icon16_language_disabled.gif','1_0'=>'icon16_language.gif','0_1'=>'icon16_language_disabled.gif','1_1'=>'icon16_language_primary.gif'), 'Fields' => Array( 'PackName' => Array( 'title'=>'la_col_PackName', 'data_block' => 'grid_checkbox_td'), 'LocalName' => Array( 'title'=>'la_col_LocalName' ), 'Enabled' => Array( 'title'=>'la_col_Status' ), ), ), ), ); ?> \ No newline at end of file Property changes on: trunk/kernel/units/languages/languages_config.php ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.3 \ No newline at end of property +1.4 \ No newline at end of property Index: trunk/kernel/units/languages/languages_tag_processor.php =================================================================== --- trunk/kernel/units/languages/languages_tag_processor.php (revision 1765) +++ trunk/kernel/units/languages/languages_tag_processor.php (revision 1766) @@ -1,61 +1,68 @@ <?php class LanguagesTagProcessor extends kDBTagProcessor { /** * Guesses what charset should be used: * 1. use lang.current_Field field="Charset" by default * 2. if using temp tables then use lang_Field field="Charset" * * @param Array $params * @return string */ function GetCharset($params) { $edit_direct = $this->Application->GetVar('phrases_label'); $top_prefix = $this->Application->GetTopmostPrefix($this->Prefix); if( $this->Application->GetVar($top_prefix.'_mode') == 't' && !$edit_direct ) { $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params); return $object->GetDBField('Charset'); } $lang_current =& $this->Application->recallObject('lang.current'); return $lang_current->GetDBField('Charset'); } function ListLanguages($params) { $this->Special = 'list'; return $this->PrintList2($params); } function SelectedLanguage($params) { $object =& $this->Application->recallObject($this->getPrefixSpecial()); return $object->GetDBField('LanguageId') == $this->Application->RecallVar('m_lang'); } /** * Returns path where exported languages should be saved * * @param unknown_type $params */ function ExportPath($params) { $admin_folder = $this->Application->ConfigValue('AdminDirectory'); if(!$admin_folder) $admin_folder = 'admin'; $ret = DOC_ROOT.BASE_PATH.'/'.$admin_folder.'/export/'; if( getArrayValue($params,'as_url') ) { $ret = str_replace( DOC_ROOT.BASE_PATH.'/', $this->Application->BaseURL(), $ret); } return $ret; } +/* function Main_IsMetricUnits($params) + { + $object =& $this->Application->recallObject($this->Prefix.'.current'); + $measure_system = $object->GetDBField('UnitSystem'); + return $measure_system == 1 ? 1 : 0; + }*/ + } ?> \ No newline at end of file Property changes on: trunk/kernel/units/languages/languages_tag_processor.php ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.2 \ No newline at end of property +1.3 \ No newline at end of property Index: trunk/kernel/admin_templates/incs/form_blocks.tpl =================================================================== --- trunk/kernel/admin_templates/incs/form_blocks.tpl (revision 1765) +++ trunk/kernel/admin_templates/incs/form_blocks.tpl (revision 1766) @@ -1,235 +1,254 @@ <inp2:m_block name="section_header"/> <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:m_param name="icon"/>.gif" align="absmiddle" title="<inp2:m_phrase label="$title"/>"> <inp2:m_phrase label="$title"/> </td> </tr> </table> <inp2:m_blockend/> <inp2:m_block name="blue_bar"/> <table border="0" cellpadding="2" cellspacing="0" class="tableborder_full" 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" cut_first="100"/></span> </td> <td align="right" class="tablenav" width="20%" valign="middle"> <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" escape="escape" front="1" />'; set_window_title( document.getElementById('blue_bar').innerHTML ); </script> <a href="javascript: OpenHelp($help_url);"> <img src="img/blue_bar_help.gif" border="0"> </a> </td> </tr> </table> <inp2:m_blockend/> <inp2:m_block name="subsection"/> <tr class="subsectiontitle"> <td colspan="5"><inp2:m_phrase label="$title"/></td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_field_caption"/> <inp2:m_inc param="tab_index" by="1"/> <td class="text"> <label for="<inp2:m_param name="NamePrefix"/><inp2:$prefix_InputName field="$field" subfield="$subfield"/>"> <span class="<inp2:m_if prefix="$prefix" function="HasError" field="$field"/>error<inp2:m_endif/>"> <inp2:m_phrase label="$title"/></span><inp2:m_if prefix="$prefix" function="IsRequired" field="$field"/><span class="error"> *</span><inp2:m_endif/>: </label> </td> <inp2:m_blockend/> <inp2:m_block name="inp_label"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field_name="$field_name" title_phrase="$title_phrase" title="$title" is_last="$is_last"/> <td valign="top"><span class="text"><inp2:$prefix_Field field="$field"/></span></td> <td class="error"><inp2:$prefix_Error field="$field"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_id_label"/> <inp2:m_if prefix="$prefix" function="FieldEquals" field="$field" value="" inverse="inverse"/> <inp2:m_ParseBlock name="inp_label" pass_params="true"/> <inp2:m_endif/> <inp2:m_blockend/> <inp2:m_block name="inp_edit_box"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" subfield="$subfield" title_phrase="$title_phrase" 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"/>"> </td> <td class="error"><inp2:$prefix_Error field="$field"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_upload"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/> <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> <td class="error"><inp2:$prefix_Error field="$field"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_box_ml"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <td class="text" valign="top"> <span class="<inp2:m_if prefix="$prefix" function="HasError" field="$field"/>error<inp2:m_endif/>"> <inp2:m_phrase label="$title"/><inp2:m_if prefix="$prefix" function="IsRequired" field="$field"/><span class="error"> *</span><inp2:m_endif/>:</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"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_hidden"/> <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_blockend/> <inp2:m_block name="inp_edit_date"/> <inp2:m_if check="m_GetEquals" name="calendar_included" value="1" inverse="inverse"> <script type="text/javascript" src="incs/calendar.js"></script> <inp2:m_set calendar_included="1"/> </inp2:m_if> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" 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"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:$prefix_Format field="{$field}_date" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>" datepickerIcon="<inp2:m_ProjectBase/>admin/images/ddarrow.gif"> <span class="small">(<inp2:$prefix_Format field="{$field}_date" human="true"/>)</span> <script type="text/javascript"> initCalendar("<inp2:$prefix_InputName field="{$field}_date"/>", "<inp2:$prefix_Format field="{$field}_date"/>"); </script> <input type="hidden" name="<inp2:$prefix_InputName field="{$field}_time"/>" id="<inp2:$prefix_InputName field="{$field}_time"/>" value=""> </td> <td class="error"><inp2:$prefix_Error field="{$field}_date"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_date_time"/> <inp2:m_if check="m_GetEquals" name="calendar_included" value="1" inverse="inverse"> <script type="text/javascript" src="incs/calendar.js"></script> <inp2:m_set calendar_included="1"/> </inp2:m_if> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" 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"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:$prefix_Format field="{$field}_date" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>" datepickerIcon="<inp2:m_ProjectBase/>admin/images/ddarrow.gif"> <span class="small">(<inp2:$prefix_Format field="{$field}_date" human="true"/>)</span> <script type="text/javascript"> initCalendar("<inp2:$prefix_InputName field="{$field}_date"/>", "<inp2:$prefix_Format field="{$field}_date"/>"); </script> <input type="text" name="<inp2:$prefix_InputName field="{$field}_time"/>" id="<inp2:$prefix_InputName field="{$field}_time"/>" value="<inp2:$prefix_Field field="{$field}_time"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:$prefix_Format field="{$field}_time" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>"><span class="small"> (<inp2:$prefix_Format field="{$field}_time" human="true"/>)</span> </td> <td class="error"><inp2:$prefix_Error field="$field"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_textarea"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <td class="text" valign="top"> <span class="<inp2:m_if prefix="$prefix" function="HasError" field="$field"/>error<inp2:m_endif/>"> <inp2:m_phrase label="$title"/><inp2:m_if prefix="$prefix" function="IsRequired" field="$field"/><span class="error"> *</span><inp2:m_endif/>:</span><br> <a href="javascript:OpenEditor('§ion=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> </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"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_user"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" 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"/>"> <a href="#" onclick="return OpenUserSelector('','kernel_form','<inp2:$prefix_InputName field="$field"/>');"> <img src="img/icons/icon24_link_user.gif" style="cursor:hand;" border="0"> </a> </td> <td class="error"><inp2:$prefix_Error field="$field"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_option_item"/> <option value="<inp2:m_param name="key"/>"<inp2:m_param name="selected"/>><inp2:m_param name="option"/></option> <inp2:m_blockend/> <inp2:m_block name="inp_option_phrase"/> <option value="<inp2:m_param name="key"/>"<inp2:m_param name="selected"/>><inp2:m_phrase label="$option"/></option> <inp2:m_blockend/> <inp2:m_block name="inp_edit_options"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" 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 prefix="m" function="ParamEquals" name="use_phrases" value="1"/> <inp2:$prefix_PredefinedOptions field="$field" block="inp_option_phrase" selected="selected"/> <inp2:m_else/> <inp2:$prefix_PredefinedOptions field="$field" block="inp_option_item" selected="selected"/> <inp2:m_endif/> </select> </td> <td class="error"><inp2:$prefix_Error field="$field"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_radio_item"/> <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"/>"><label for="<inp2:$prefix_InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_phrase label="$option"/></label> <inp2:m_blockend/> <inp2:m_block name="inp_checkbox_item"/> <input type="checkbox" <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"/>"><label for="<inp2:$prefix_InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_phrase label="$option"/></label> <inp2:m_if check="$prefix_HasParam" name="hint_label"><inp2:m_phrase label="$hint_label"/></inp2:m_if> <inp2:m_blockend/> <inp2:m_block name="inp_edit_radio"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/> <td> <inp2:$prefix_PredefinedOptions field="$field" tabindex="$pass_tabindex" block="inp_radio_item" selected="checked"/> </td> <td class="error"><inp2:$prefix_Error field="$field"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_checkbox"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" 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" />"> <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"/> </td> </tr> <inp2:m_blockend/> <inp2:m_block name="inp_edit_checkboxes"/> <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" 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> </td> <td class="error"><inp2:$prefix_Error field="$field"/> </td> </tr> -<inp2:m_blockend/> \ No newline at end of file +<inp2:m_blockend/> + +<inp2:m_block name="inp_edit_weight" /> + <tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>"> + <inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" subfield="$subfield" title_phrase="$title_phrase" 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"/> </td> + </tr> +<inp2:m_blockend /> \ No newline at end of file Property changes on: trunk/kernel/admin_templates/incs/form_blocks.tpl ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.6 \ No newline at end of property +1.7 \ No newline at end of property Index: trunk/core/kernel/utility/formatters.php =================================================================== --- trunk/core/kernel/utility/formatters.php (revision 1765) +++ trunk/core/kernel/utility/formatters.php (revision 1766) @@ -1,1000 +1,1005 @@ <?php class kFormatter extends kBase { /** * Convert's value to match type from config * * @param mixed $value * @param Array $options * @return mixed * @access protected */ function TypeCast($value, $options) { $ret = true; if( isset($options['type']) ) { $field_type = $options['type']; $type_ok = preg_match('#int|integer|double|float|real|numeric|string#', $field_type); if($field_type == 'string') return $value; if ($value != '' && $type_ok) { $ret = is_numeric($value); if($ret) { $f = 'is_'.$field_type; settype($value, $field_type); $ret = $f($value); } } } return $ret ? $value : false; } //function Format($value, $options, &$errors) function Format($value, $field_name, &$object, $format=null) { if ( is_null($value) ) return ''; $options = $object->GetFieldOptions($field_name); if ( isset($format) ) $options['format'] = $format; $tc_value = $this->TypeCast($value,$options); if( ($tc_value === false) || ($tc_value != $value) ) return $value; // for leaving badly formatted date on the form if (isset($options['format'])) return sprintf($options['format'], $tc_value); return $tc_value; } //function Parse($value, $options, &$errors) function Parse($value, $field_name, &$object) { if ($value == '') return NULL; $options = $object->GetFieldOptions($field_name); $tc_value = $this->TypeCast($value,$options); if($tc_value === false) return $value; // for leaving badly formatted date on the form if( isset($options['type']) ) { if( preg_match('#double|float|real|numeric#', $options['type']) ) $tc_value = str_replace(',', '.', $tc_value); } if( isset($options['regexp']) ) { if( !preg_match($options['regexp'], $value) ) { $object->FieldErrors[$field_name]['pseudo'] = 'invalid_format'; } } return $tc_value; } function HumanFormat($format) { return $format; } /** * The method is supposed to alter config options or cofigure object in some way based on its usage of formatters * The methods is called for every field with formatter defined when configuring item. * Could be used for adding additional VirtualFields to an object required by some special Formatter * * @param string $field_name * @param array $field_options * @param kDBBase $object */ function PrepareOptions($field_name, &$field_options, &$object) { } /** * Used for split fields like timestamp -> date, time * Called from DBItem to update sub fields values after loading item * * @param unknown_type $field * @param unknown_type $value * @param unknown_type $options * @param unknown_type $object */ function UpdateSubFields($field, $value, &$options, &$object) { } /** * Used for split fields like timestamp -> date, time * Called from DBItem Validate (before validation) to get back master field value from its sub_fields * * @param unknown_type $field * @param unknown_type $value * @param unknown_type $options * @param unknown_type $object */ function UpdateMasterFields($field, $value, &$options, &$object) { } /* function GetErrorMsg($pseudo_error, $options) { if ( isset($options['error_msgs'][$pseudo_error]) ) { return $options['error_msgs'][$pseudo_error]; } else { return $this->ErrorMsgs[$pseudo_error]; } }*/ function GetSample($field, &$options, &$object) { } } class kOptionsFormatter extends kFormatter { //function Format($value, $options, &$errors) function Format($value, $field_name, &$object, $format=null) { if ( is_null($value) ) return ''; $options = $object->GetFieldOptions($field_name); if ( isset($format) ) $options['format'] = $format; $label = getArrayValue($options['options'], $value); if( getArrayValue($options,'use_phrases') ) { return $this->Application->Phrase($label); } else { return $label; } } } /** * Replacement for kOptionsFormatter in case if options * should be selected from database. Use this formatter * only in case if formatter attached field is in edit form. * * For usage in grid just use LEFT JOIN clause to table * where requested options are located. */ class kLEFTFormatter extends kFormatter { //function Format($value, $options, &$errors) function Format($value, $field_name, &$object, $format=null) { if ( is_null($value) ) return ''; $options = $object->GetFieldOptions($field_name); if ( isset($format) ) $options['format'] = $format; if( !isset($options['options'][$value]) ) { // required option is not defined in config => query for it $db =& $this->Application->GetADODBConnection(); $sql = sprintf($options['left_sql'],$options['left_title_field'],$options['left_key_field'],$value); $options['options'][$value] = $db->GetOne($sql); } return $options['options'][$value]; } //function Parse($value, $options, &$errors) function Parse($value, $field_name, &$object) { if ($value == '') return NULL; $options = $object->GetFieldOptions($field_name); if( !array_search($value,$options['options']) ) { // required option is not defined in config => query for it $db =& $this->Application->GetADODBConnection(); $sql = sprintf($options['left_sql'],$options['left_key_field'],$options['left_title_field'],$value); $found = $db->GetOne($sql); if($found !== false) $options['options'][$found] = $value; } else { $found = array_search($value,$options['options']); } if($found === false) $found = $options['default']; return $found; } } class kDateFormatter extends kFormatter { /* function kDateFormatter() { parent::kFormatter(); $this->ErrorMsgs['bad_dformat'] = 'Please use correct date format (%s) ex. (%s)'; } */ function PrepareOptions($field_name, &$field_options, &$object) { $date_format = getArrayValue($field_options, 'date_format'); $time_format = getArrayValue($field_options, 'time_format'); $language =& $this->Application->recallObject('lang.current'); if ($date_format === false) $date_format = $language->GetDBField('DateFormat'); if ($time_format === false) $time_format = $language->GetDBField('TimeFormat'); if (!isset($field_options['date_time_separator'])) $field_options['date_time_separator'] = ' '; $field_options['format'] = $date_format.$field_options['date_time_separator'].$time_format; $field_options['sub_fields'] = Array('date' => $field_name.'_date', 'time' => $field_name.'_time'); $add_fields = Array(); $opts = Array('master_field' => $field_name, 'formatter'=>'kDateFormatter', 'format'=>$date_format); if ( isset($field_options['default']) ) $opts['default'] = $field_options['default']; if ( isset($field_options['required']) ) $opts['required'] = $field_options['required']; $add_fields[$field_name.'_date'] = $opts; $opts['format'] = $time_format; $add_fields[$field_name.'_time'] = $opts; if ( !isset($object->VirtualFields[$field_name]) ) { // adding caluclated field to format date directly in the query if ( !isset($object->CalculatedFields) || !is_array($object->CalculatedFields) ) { $object->CalculatedFields = Array(); } $object->CalculatedFields[$field_name.'_formatted'] = 'FROM_UNIXTIME('.'`%1$s`.'.$field_name.', \''.$this->SQLFormat($field_options['format']).'\')'; $opts['format'] = $field_options['format']; $opts['required'] = 0; unset($opts['master_field']); $add_fields[$field_name.'_formatted'] = $opts; } $add_fields = array_merge_recursive2($add_fields, $object->VirtualFields); $object->setVirtualFields($add_fields); } function UpdateSubFields($field, $value, &$options, &$object) { if ( $sub_fields = getArrayValue($options, 'sub_fields') ) { if( isset($value) && $value ) { $object->SetDBField( $sub_fields['date'], $value ); $object->SetDBField( $sub_fields['time'], $value ); } } } function UpdateMasterFields($field, $value, &$options, &$object) { // when in master field - set own value from sub_fields if ( $sub_fields = getArrayValue($options, 'sub_fields') ) { // if date is not empty, but time is empty - set time to 0, otherwise master field fomratter will complain // when we have only date field on form, we need time hidden field always empty, don't ask me why! if ( $object->GetDBField($sub_fields['date']) != '' && $object->GetDBField($sub_fields['time']) == '' ) { $empty_time = getArrayValue($options,'empty_time'); if($empty_time === false) $empty_time = mktime(0,0,0); $object->SetDBField($sub_fields['time'], $empty_time); } $object->SetField($field, $object->GetField($sub_fields['date']).$options['date_time_separator'].$object->GetField($sub_fields['time'])); } // when in one of sub_fields - call update for master_field to update its value from sub_fields [are you following ? :) ] elseif ($master_field = getArrayValue($options, 'master_field') ) { $this->UpdateMasterFields($master_field, null, $object->GetFieldOptions($master_field), $object); } } //function Format($value, $options, &$errors) function Format($value, $field_name, &$object, $format=null) { if ( is_null($value) ) return ''; if ( !is_numeric($value) ) return $value; // for leaving badly formatted date on the form settype($value, 'int'); if ( !is_int($value) ) return $value; $options = $object->GetFieldOptions($field_name); if ( isset($format) ) $options['format'] = $format; return date($options['format'], $value); } function HumanFormat($format) { $patterns = Array('/m/', '/n/', '/d/', '/j/', '/y/', '/Y/', '/h|H/', '/g|G/', '/i/', '/s/', '/a|A/'); $replace = Array( 'mm', 'm', 'dd', 'd', 'yy', 'yyyy', 'hh', 'h', 'mm', 'ss', 'AM'); $res = preg_replace($patterns, $replace, $format); return $res; } function SQLFormat($format) { $mapping = Array( '/%/' => '%%', '/(?<!%)a/' => '%p', // Lowercase Ante meridiem and Post meridiem => MySQL provides only uppercase '/(?<!%)A/' => '%p', // Uppercase Ante meridiem and Post meridiem '/(?<!%)d/' => '%d', // Day of the month, 2 digits with leading zeros '/(?<!%)D/' => '%a', // A textual representation of a day, three letters '/(?<!%)F/' => '%M', // A full textual representation of a month, such as January or March '/(?<!%)g/' => '%l', // 12-hour format of an hour without leading zeros '/(?<!%)G/' => '%k', // 24-hour format of an hour without leading zeros '/(?<!%)h/' => '%h', // 12-hour format of an hour with leading zeros '/(?<!%)H/' => '%H', // 24-hour format of an hour with leading zeros '/(?<!%)i/' => '%i', // Minutes with leading zeros '/(?<!%)I/' => 'N/A', // Whether or not the date is in daylights savings time '/(?<!%)S/' => 'N/A', // English ordinal suffix for the day of the month, 2 characters, see below '/jS/' => '%D', // MySQL can't return separate suffix, but could return date with suffix '/(?<!%)j/' => '%e', // Day of the month without leading zeros '/(?<!%)l/' => '%W', // A full textual representation of the day of the week '/(?<!%)L/' => 'N/A', // Whether it's a leap year '/(?<!%)m/' => '%m', // Numeric representation of a month, with leading zeros '/(?<!%)M/' => '%b', // A short textual representation of a month, three letters '/(?<!%)n/' => '%c', // Numeric representation of a month, without leading zeros '/(?<!%)O/' => 'N/A', // Difference to Greenwich time (GMT) in hours '/(?<!%)r/' => 'N/A', // RFC 2822 formatted date '/(?<!%)s/' => '%s', // Seconds, with leading zeros // S and jS moved before j - see above '/(?<!%)t/' => 'N/A', // Number of days in the given month '/(?<!%)T/' => 'N/A', // Timezone setting of this machine '/(?<!%)U/' => 'N/A', // Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) '/(?<!%)w/' => '%w', // Numeric representation of the day of the week '/(?<!%)W/' => '%v', // ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0) '/(?<!%)Y/' => '%Y', // A full numeric representation of a year, 4 digits '/(?<!%)y/' => '%y', // A two digit representation of a year '/(?<!%)z/' => 'N/A', // The day of the year (starting from 0) => MySQL starts from 1 '/(?<!%)Z/' => 'N/A', // Timezone offset in seconds. The offset for timezones west of UTC is always negative, and for those east of UTC is always positive. ); $patterns = array_keys($mapping); $replacements = array_values($mapping); $res = preg_replace($patterns, $replacements, $format); return $res; } //function Parse($value, $options, &$errors) function Parse($value, $field_name, &$object) { $options = $object->GetFieldOptions($field_name); $dt_separator = getArrayValue($options,'date_time_separator'); if($dt_separator) $value = trim($value, $dt_separator); if($value == '') return NULL; //return strtotime($value); $format = $options['format']; if($dt_separator) $format = trim($format, $dt_separator); $object->FieldErrors[$field_name]['params'] = Array( $this->HumanFormat($format), date($format) ); $object->FieldErrors[$field_name]['value'] = $value; $hour = 0; $minute = 0; $second = 0; $month = 1; $day = 1; $year = 1970; $patterns['n'] = '([0-9]{1,2})'; $patterns['m'] = '([0-9]{1,2})'; $patterns['d'] = '([0-9]{1,2})'; $patterns['j'] = '([0-9]{1,2})'; $patterns['Y'] = '([0-9]{4})'; $patterns['y'] = '([0-9]{2})'; $patterns['G'] = '([0-9]{1,2})'; $patterns['g'] = '([0-9]{1,2})'; $patterns['H'] = '([0-9]{2})'; $patterns['h'] = '([0-9]{2})'; $patterns['i'] = '([0-9]{2})'; $patterns['s'] = '([0-9]{2})'; $patterns['a'] = '(am|pm)'; $patterns['A'] = '(AM|PM)'; $holders_mask = eregi_replace('[a-zA-Z]{1}', '([a-zA-Z]{1})', $format); if (!ereg($holders_mask, $format, $holders)) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_date_format'; return $value; } $values_mask = '/^'.str_replace('/','\/',$format).'$/'; foreach ($patterns as $key => $val) { $values_mask = ereg_replace($key, $val, $values_mask); } // echo " values_mask : $values_mask <br>"; if (!preg_match($values_mask, $value, $values)) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_date_format'; return $value; } for ($i = 1; $i < count($holders); $i++) { switch ($holders[$i]) { case 'n': case 'm': $month = $values[$i]; $month = ereg_replace("^0{1}", '', $month); break; case 'd': $day = $values[$i]; $day = ereg_replace("^0{1}", '', $day); break; case 'Y': $year = $values[$i]; break; case 'y': $year = $values[$i] >= 70 ? 1900 + $values[$i] : 2000 + $values[$i]; break; case 'H': case 'h': case 'G': case 'g': $hour = $values[$i]; $hour = ereg_replace("^0{1}", '', $hour); break; case 'i': $minute = $values[$i]; $minute = ereg_replace("^0{1}", '', $minute); break; case 's': $second = $values[$i]; $second = ereg_replace("^0{1}", '', $second); break; case 'a': case 'A': if ($hour <= 12) { // if AM/PM used with 24-hour - could happen :) if ($values[$i] == 'pm' || $values[$i] == 'PM') { $hour += 12; if ($hour == 24) $hour = 12; } elseif ($values[$i] == 'am' || $values[$i] == 'AM') { if ($hour == 12) $hour = 0; } } break; } } //echo "day: $day, month: $month, year: $year, hour: $hour, minute: $minute<br>"; /*if (!($year >= 1970 && $year <= 2037)) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_date_format'; return $value; }*/ if (!($month >= 1 && $month <= 12)) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_date_format'; return $value; } $months_days = Array ( 1 => 31,2 => 28, 3 => 31, 4 => 30,5 => 31,6 => 30, 7 => 31, 8 => 31,9 => 30,10 => 31,11 => 30,12 => 31); if ($year % 4 == 0) $months_days[2] = 29; if (!($day >=1 && $day <= $months_days[$month])) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_date_format'; return $value; } if (!($hour >=0 && $hour <= 23)) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_date_format'; return $value; } if (!($minute >=0 && $minute <= 59)) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_date_format'; return $value; } if (!($second >=0 && $second <= 59)) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_date_format'; return $value; } // echo "day: $day, month: $month, year: $year, hour: $hour, minute: $minute<br>"; return (mktime($hour, $minute, $second, $month, $day, $year)); } function GetSample($field, &$options, &$object) { return $this->Format( time(), $field, $object); } } class kUploadFormatter extends kFormatter { var $DestinationPath; var $FullPath; function kUploadFormatter() { if ($this->DestinationPath) { $this->FullPath = DOC_ROOT.BASE_PATH.$this->DestinationPath; } parent::kBase(); } //function Parse($value, $options, &$errors) function Parse($value, $field_name, &$object) { $ret = ''; $options = $object->GetFieldOptions($field_name); if (getArrayValue($value, 'upload') && getArrayValue($value, 'error') == UPLOAD_ERR_NO_FILE) { return getArrayValue($value, 'upload'); } if ( is_array($value) && $value['size'] ) { if ( is_array($value) && $value['error'] === UPLOAD_ERR_OK ) { if ( !in_array($value['type'], $options['allowed_types']) ) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_file_format'; } elseif ( $value['size'] > ($options['max_size'] ? $options['max_size'] : MAX_UPLOAD_SIZE) ) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_file_size'; } elseif ( !is_writable($this->FullPath) ) { $object->FieldErrors[$field_name]['pseudo'] = 'cant_save_file'; } else { $real_name = $this->ValidateFileName($this->FullPath, $value['name']); $file_name = $this->FullPath.$real_name; if ( !move_uploaded_file($value['tmp_name'], $file_name) ) { $object->FieldErrors[$field_name]['pseudo'] = 'cant_save_file'; } else { $ret = $this->DestinationPath.$real_name; } } } else { $object->FieldErrors[$field_name]['pseudo'] = 'cant_save_file'; } } if ($value['error'] && !( $value['error'] == UPLOAD_ERR_NO_FILE ) && !$object->FieldErrors[$field_name]['pseudo']) { $object->FieldErrors[$field_name]['pseudo'] = 'cant_save_file'; } return $ret; } function ValidateFileName($path, $name) { $parts = pathinfo($name); $ext = '.'.$parts['extension']; $filename = substr($parts['basename'], 0, -strlen($ext)); $new_name = $filename.$ext; while ( file_exists($path.'/'.$new_name) ) { if ( preg_match("/({$filename}_)([0-9]*)($ext)/", $new_name, $regs) ) { $new_name = $regs[1].($regs[2]+1).$regs[3]; } else { $new_name = $filename.'_1'.$ext; } } return $new_name; } } class kPictureFormatter extends kUploadFormatter { function kPictureFormatter() { $this->NakeLookupPath = IMAGES_PATH; $this->DestinationPath = IMAGES_PENDING_PATH; parent::kUploadFormatter(); } } class kMultiLanguage extends kFormatter { function LangFieldName($field_name) { $lang = $this->Application->GetVar('m_lang'); return 'l'.$lang.'_'.$field_name; } function PrepareOptions($field_name, &$field_options, &$object) { if (getArrayValue($object->Fields, $field_name, 'master_field')) return; $lang_field_name = $this->LangFieldName($field_name); //substitude title field $title_field = $this->Application->getUnitOption($object->Prefix, 'TitleField'); if ($title_field == $field_name) { $this->Application->setUnitOption($object->Prefix, 'TitleField', $lang_field_name); } //substitude fields $fields = $this->Application->getUnitOption($object->Prefix, 'Fields'); if ( isset($fields[$field_name]) ) { $fields[$lang_field_name] = $fields[$field_name]; $fields[$lang_field_name]['master_field'] = $field_name; $object->Fields[$lang_field_name] = $fields[$lang_field_name]; $fields[$field_name]['required'] = false; $object->Fields[$field_name]['required'] = false; $object->VirtualFields[$field_name] = $object->Fields[$field_name]; } $this->Application->setUnitOption($object->Prefix, 'Fields', $fields); //substitude virtual fields $virtual_fields = $this->Application->getUnitOption($object->Prefix, 'VirtualFields'); if ( isset($virtual_fields[$field_name]) ) { $virtual_fields[$lang_field_name] = $virtual_fields[$field_name]; $virtual_fields[$lang_field_name]['master_field'] = $field_name; $object->VirtualFields[$lang_field_name] = $virtual_fields[$lang_field_name]; $virtual_fields[$field_name]['required'] = false; $object->VirtualFields[$field_name]['required'] = false; } $this->Application->setUnitOption($object->Prefix, 'VirtualFields', $virtual_fields); //substitude grid fields $grids = $this->Application->getUnitOption($object->Prefix, 'Grids'); foreach ($grids as $name => $grid) { if ( getArrayValue($grid, 'Fields', $field_name) ) { array_rename_key($grids[$name]['Fields'], $field_name, $lang_field_name); } } $this->Application->setUnitOption($object->Prefix, 'Grids', $grids); //substitude default sortings $sortings = $this->Application->getUnitOption($object->Prefix, 'ListSortings'); foreach ($sortings as $special => $the_sortings) { if (isset($the_sortings['ForcedSorting'])) { array_rename_key($sortings[$special]['ForcedSorting'], $field_name, $lang_field_name); } if (isset($the_sortings['Sorting'])) { array_rename_key($sortings[$special]['Sorting'], $field_name, $lang_field_name); } } $this->Application->setUnitOption($object->Prefix, 'ListSortings', $sortings); //TODO: substitude possible language-fields sortings after changing language } /*function UpdateSubFields($field, $value, &$options, &$object) { } function UpdateMasterFields($field, $value, &$options, &$object) { }*/ function Format($value, $field_name, &$object, $format=null) { $master_field = getArrayValue($object->Fields, $field_name, 'master_field'); if (!$master_field) { // if THIS field is master it does NOT have reference to it's master_field $lang = $this->Application->GetVar('m_lang'); $value = $object->GetDBField('l'.$lang.'_'.$field_name); //getting value of current language $master_field = $field_name; // THIS is master_field } if ( $value == '' && $format != 'no_default') { // try to get default language value $def_lang_value = $object->GetDBField('l'.$this->Application->GetDefaultLanguageId().'_'.$master_field); if ($def_lang_value == '') return NULL; return $def_lang_value; //return value from default language } return $value; } function Parse($value, $field_name, &$object) { $lang = $this->Application->GetVar('m_lang'); $def_lang = $this->Application->GetDefaultLanguageId(); $master_field = getArrayValue($object->Fields, $field_name, 'master_field'); if ( getArrayValue($object->Fields, $field_name, 'required') && ( (string) $value == '' ) ) { $object->FieldErrors[$master_field]['pseudo'] = 'required'; }; if (!$this->Application->GetVar('allow_translation') && $lang != $def_lang && getArrayValue($object->Fields, $field_name, 'required')) { $def_lang_field = 'l'.$def_lang.'_'.$master_field; if ( !$object->ValidateRequired($def_lang_field, $object->Fields[$field_name]) ) { $object->FieldErrors[$master_field]['pseudo'] = 'primary_lang_required'; } } if ($value == '') return NULL; return $value; } } class kPasswordFormatter extends kFormatter { function PrepareOptions($field_name, &$field_options, &$object) { if( isset( $field_options['verify_field'] ) ) { $add_fields = Array(); $options = Array('master_field' => $field_name, 'formatter'=>'kPasswordFormatter'); $add_fields[ $field_options['verify_field'] ] = $options; $add_fields[$field_name.'_plain'] = Array('type'=>'string', 'error_field'=>$field_name); $add_fields[ $field_options['verify_field'].'_plain' ] = Array('type'=>'string', 'error_field'=>$field_options['verify_field'] ); $add_fields = array_merge_recursive2($add_fields, $object->VirtualFields); $object->setVirtualFields($add_fields); } } function Format($value, $field_name, &$object, $format=null) { return $value; } function Parse($value, $field_name, &$object) { $options = $object->GetFieldOptions($field_name); $fields = Array('master_field','verify_field'); $fields_set = true; $flip_count = 0; while($flip_count < 2) { if( getArrayValue($options,$fields[0]) ) { $object->SetDBField($field_name.'_plain', $value); if( !getArrayValue($object->Fields[ $options[ $fields[0] ] ], $fields[1].'_set') ) { $object->Fields[ $options[ $fields[0] ] ][$fields[1].'_set'] = true; } $password_field = $options[ $fields[0] ]; $verify_field = $field_name; } $fields = array_reverse($fields); $flip_count++; } if( getArrayValue($object->Fields[$password_field], 'verify_field_set') && getArrayValue($object->Fields[$verify_field], 'master_field_set') ) { $new_password = $object->GetDBField($password_field.'_plain'); $verify_password = $object->GetDBField($verify_field.'_plain'); if($new_password == '' && $verify_password == '') { if( $object->GetDBField($password_field) != $this->EncryptPassword('') ) { return $this->EncryptPassword($value); } else { $object->Fields[$password_field.'_plain']['required'] = true; $object->Fields[$verify_field.'_plain']['required'] = true; return null; } } $min_length = $this->Application->ConfigValue('Min_Password'); if( strlen($new_password) >= $min_length ) { if($new_password != $verify_password) { $object->ErrorMsgs['passwords_do_not_match'] = $this->Application->Phrase('lu_passwords_do_not_match'); $object->FieldErrors[$password_field]['pseudo'] = 'passwords_do_not_match'; $object->FieldErrors[$verify_field]['pseudo'] = 'passwords_do_not_match'; } } else { $object->FieldErrors[$password_field]['pseudo'] = 'length_out_of_range'; $object->FieldErrors[$verify_field]['pseudo'] = 'length_out_of_range'; } } if($value == '') return $object->GetDBField($field_name); return $this->EncryptPassword($value); } function EncryptPassword($value) { return md5($value); } } /** * Credit card expiration date formatter * */ class kCCDateFormatter extends kFormatter { function PrepareOptions($field_name, &$field_options, &$object) { $add_fields = Array(); $i = 1; $options = Array('00' => ''); while($i <= 12) { $options[ sprintf('%02d',$i) ] = sprintf('%02d',$i); $i++; } $add_fields[ $field_options['month_field'] ] = Array('formatter'=>'kOptionsFormatter', 'options' => $options, 'not_null' => true, 'default' => '00'); $add_fields[ $field_options['year_field'] ] = Array('type' => 'string', 'default' => ''); $add_fields = array_merge_recursive2($add_fields, $object->VirtualFields); $object->setVirtualFields($add_fields); } function UpdateSubFields($field, $value, &$options, &$object) { if(!$value) return false; $date = explode('/', $value); $object->SetDBField( $options['month_field'], $date[0] ); $object->SetDBField( $options['year_field'], $date[1] ); } /** * Will work in future if we could attach 2 formatters to one field * * @param string $value * @param string $field_name * @param kBase $object * @return string */ function Parse($value, $field_name, &$object) { // if ( is_null($value) ) return ''; $options = $object->GetFieldOptions($field_name); $month = $object->GetDirtyField($options['month_field']); $year = $object->GetDirtyField($options['year_field']); if( !(int)$month && !(int)$year ) return NULL; $is_valid = ($month >= 1 && $month <= 12) && ($year >= 0 && $year <= 99); if(!$is_valid) $object->FieldErrors[$field_name]['pseudo'] = 'bad_type'; return $month.'/'.$year; } } class kUnitFormatter extends kFormatter { function PrepareOptions($field_name, &$field_options, &$object) { if( !isset($field_options['master_field']) ) { $regional =& $this->Application->recallObject('lang.current'); $add_fields = Array(); - $options = Array('type' => 'int','error_field' => $field_name,'master_field' => $field_name,'formatter' => 'kUnitFormatter'); - $options = array_merge_recursive2($field_options, $options); + $options_a = Array('type' => 'int','error_field' => $field_name,'master_field' => $field_name,'format' => '%d'); + $options_b = Array('type' => 'double','error_field' => $field_name,'master_field' => $field_name,'format' => '%0.1f'); switch( $regional->GetDBField('UnitSystem') ) { case 2: // US/UK - $add_fields[$field_name.'_a'] = $options; - $add_fields[$field_name.'_b'] = $options; + $add_fields[$field_name.'_a'] = array_merge_recursive2($field_options, $options_a); + $add_fields[$field_name.'_b'] = array_merge_recursive2($field_options, $options_b); break; default: } $add_fields = array_merge_recursive2($add_fields, $object->VirtualFields); $object->setVirtualFields($add_fields); } } function UpdateMasterFields($field, $value, &$options, &$object) { if( !isset($options['master_field']) ) { $regional =& $this->Application->recallObject('lang.current'); switch( $regional->GetDBField('UnitSystem') ) { case 2: // US/UK $major = $object->GetDirtyField($field.'_a'); $minor = $object->GetDirtyField($field.'_b'); $value = $major / 2 + $minor / 32; break; default: } $object->SetDBField($field, $value); } } function UpdateSubFields($field, $value, &$options, &$object) { if( !isset($options['master_field']) ) { $regional =& $this->Application->recallObject('lang.current'); switch( $regional->GetDBField('UnitSystem') ) { case 2: // US/UK $major = floor( $value / 0.5 ); $minor = ($value - $major * 0.5) * 32; $major = $object->SetDBField($field.'_a', $major); $minor = $object->SetDBField($field.'_b', $minor); break; default: } } } + function Format($value, $field_name, &$object, $format=null) + { + return parent::Format($value, $field_name, $object, $format); + } + /* function Format($value, $field_name, &$object, $format=null) { if( isset($field_options['master_field']) ) { $regional =& $this->Application->recallObject('lang.current'); switch( $regional->GetDBField('UnitSystem') ) { case 2: // US/UK $major = floor( $value / 0.5 ); $minor = $value - $major; $major = $object->SetDBField($field_name.'_a', $major); $minor = $object->SetDBField($field_name.'_b', $minor); break; default: } } return parent::Format($value, $field_name, $object); }*/ /*function Parse($value, $field_name, &$object) { $regional =& $this->Application->recallObject('lang.current'); switch($regional->GetDBField('UnitSystem')) { case 1: // metric return $object->GetDBField('UnitSystem_a'); break; case 2: // US/UK return $object->GetDBField('UnitSystem_a') * 0.5 + $object->GetDBField('UnitSystem_b') * 0.5 / 16; break; default: } }*/ } ?> Property changes on: trunk/core/kernel/utility/formatters.php ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.5 \ No newline at end of property +1.6 \ No newline at end of property Index: trunk/core/kernel/languages/phrases_cache.php =================================================================== --- trunk/core/kernel/languages/phrases_cache.php (revision 1765) +++ trunk/core/kernel/languages/phrases_cache.php (revision 1766) @@ -1,175 +1,175 @@ <?php class PhrasesCache extends kDBBase { var $Phrases = Array(); var $Ids = Array(); var $OriginalIds = Array(); //for comparing cache var $LanguageId = 1; var $fromTag = false; function PhrasesCache($LanguageId=1) { parent::kDBBase(); $this->Phrases = Array(); $this->LanguageId = $LanguageId; $this->LoadPhrases( $this->GetCachedIds() ); } function GetCachedIds() { $query = sprintf("SELECT PhraseList FROM %s WHERE Template = %s", TABLE_PREFIX.'PhraseCache', $this->Conn->Qstr(md5($this->Application->GetVar('t')))); $phrases_ids = $this->Conn->GetOne($query); if ($phrases_ids === false) return Array(); return explode(',', $phrases_ids); } function LoadPhrases($ids) { if ( !is_array($ids) || !implode('', $ids) ) return; $query = sprintf("SELECT Translation,Phrase FROM %s WHERE LanguageId = %s AND PhraseId IN (%s)", TABLE_PREFIX.'Phrase', $this->LanguageId, join(',', $ids)); $phrases = $this->Conn->GetCol($query,'Phrase'); foreach($phrases as $phrase => $tanslation) { $this->AddCachedPhrase(strtoupper($phrase), $tanslation); } $this->Ids = $ids; $this->OriginalIds = $ids; } function AddCachedPhrase($label, $value) { $label = strtoupper($label); $this->Phrases[$label] = $value; } function UpdateCache() { if (!is_array($this->Ids) || count($this->Ids) == 0) return; if ($this->Ids == $this->OriginalIds) return; //nothing changed $query = sprintf("REPLACE %s (PhraseList, CacheDate, Template) VALUES (%s, %s, %s)", TABLE_PREFIX.'PhraseCache', $this->Conn->Qstr(join(',', $this->Ids)), mktime(), $this->Conn->Qstr(md5($this->Application->GetVar('t')))); $this->Conn->Query($query); } function GetPhrase($label) { if (ereg("^!.+!$", $label) > 0) { $label = substr($label, 1, -1); //cut exclamation marks } $original_label = $label; $label = strtoupper($label); if( isset($this->Phrases[$label]) ) { $translated_label = $this->Phrases[$label]; if($this->Application->isDebugMode() && dbg_ConstOn('DBG_PHRASES_HILIGHT') && !$this->Application->IsAdmin()) $translated_label = '<span style="border: 1px solid #999999; background-color: #cccccc; color: #999999; ">'.$translated_label.'</span>'; return $translated_label; } $this->LoadPhraseByLabel($label, $original_label); return $this->GetPhrase($label); } function LoadPhraseByLabel($label, $original_label) { $query = sprintf("SELECT PhraseId, Translation FROM %s WHERE LanguageId = %s AND UPPER(Phrase) = UPPER(%s)", TABLE_PREFIX.'Phrase', $this->LanguageId, $this->Conn->qstr($label)); $res = $this->Conn->GetRow($query); if ($res === false || count($res) == 0) { $translation = '!'.$label.'!'; if( $this->Application->isDebugMode() && dbg_ConstOn('DBG_PHRASES') ) { - list($edit_tpl, $index_file) = $this->Application->IsAdmin() ? Array('regional/phrases_edit', 'index4.php') : Array('organized/phrases_edit', 'index.php'); + list($edit_tpl, $index_file) = $this->Application->IsAdmin() ? Array('regional/phrases_edit', 'index4.php') : Array('phrases_edit', 'index.php'); $edit_url = $this->Application->HREF($edit_tpl,'',Array('m_opener'=>'d','phrases_label'=>$original_label,'phrases_event'=>'OnNew', 'pass'=>'all,phrases'), $index_file ); $translation = '<a href="'.$edit_url.'">!'.$label.'!</a>'; if($this->fromTag) $translation = $this->escapeTagReserved($translation); } $this->AddCachedPhrase($label, $translation); //add it as already cached, as long as we dont need to cache not found phrase return false; } $this->Phrases[$label] = $res['Translation']; array_push($this->Ids, $res['PhraseId']); $this->Ids = array_unique($this->Ids); //just to make sure return true; } /** * Sort params by name and then by length * * @param string $a * @param string $b * @return int * @access private */ function CmpParams($a, $b) { $a_len = strlen($a); $b_len = strlen($b); if ($a_len == $b_len) return 0; return $a_len > $b_len ? -1 : 1; } /** * Replace language tags in exclamation marks found in text * * @param string $text * @param bool $force_escape force escaping, not escaping of resulting string * @return string * @access public */ function ReplaceLanguageTags($text,$forse_escaping=null) { $this->fromTag = true; if( isset($forse_escaping) ) $this->fromTag = $forse_escaping; preg_match_all("(!(la|lu)[^!]+!)", $text, $res, PREG_PATTERN_ORDER); $language_tags = $res[0]; uasort($language_tags, Array(&$this, 'CmpParams') ); $values = Array(); $i = 0; foreach ($language_tags as $label) { array_push($values, $this->GetPhrase($label) ); //array_push($values, $this->Application->Phrase($label) ); $language_tags[$i] = '/' . $language_tags[$i] . '/'; $i++; } $this->fromTag = false; return preg_replace($language_tags, $values, $text); } /** * Escape chars in phrase translation, that could harm parser to process tag * * @param string $text * @return string * @access private */ function escapeTagReserved($text) { $reserved = Array('"',"'"); // = $replacement = Array('\"',"\'"); // \= return str_replace($reserved,$replacement,$text); } } ?> \ No newline at end of file Property changes on: trunk/core/kernel/languages/phrases_cache.php ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.5 \ No newline at end of property +1.6 \ No newline at end of property Index: trunk/core/units/languages/languages_config.php =================================================================== --- trunk/core/units/languages/languages_config.php (revision 1765) +++ trunk/core/units/languages/languages_config.php (revision 1766) @@ -1,141 +1,146 @@ <?php $config = Array( 'Prefix' => 'lang', 'ItemClass' => Array('class'=>'LanguagesItem','file'=>'languages_item.php','build_event'=>'OnItemBuild'), 'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'), 'EventHandlerClass' => Array('class'=>'LanguagesEventHandler','file'=>'languages_event_handler.php','build_event'=>'OnBuild'), 'TagProcessorClass' => Array('class'=>'LanguagesTagProcessor','file'=>'languages_tag_processor.php','build_event'=>'OnBuild'), - 'RegisterClasses' => Array( Array('pseudo'=>'LangXML','class'=>'LangXML_Parser','file'=>'import_xml.php'), ), - + /*'AggregateTags' => Array( + Array( + 'AggregateTo' => 'm', + 'AggregatedTagName' => 'IsMetricUnits', + 'LocalTagName' => 'Main_IsMetricUnits', + ), + ), */ 'AutoLoad' => true, 'Hooks' => Array( Array( 'Mode' => hAFTER, 'Conditional' => false, 'HookToPrefix' => 'lang', 'HookToSpecial' => '', 'HookToEvent' => Array('OnSave'), 'DoPrefix' => '', 'DoSpecial' => '', 'DoEvent' => 'OnReflectMultiLingualFields', ), Array( 'Mode' => hAFTER, 'Conditional' => false, 'HookToPrefix' => 'lang', 'HookToSpecial' => '', 'HookToEvent' => Array('OnPreSave'), 'DoPrefix' => '', 'DoSpecial' => '', 'DoEvent' => 'OnCopyLabels', ), ), 'QueryString' => Array( 1 => 'id', 2 => 'page', 3 => 'event', 4 => 'mode', ), 'IDField' => 'LanguageId', 'StatusField' => Array('Enabled','PrimaryLang'), // field, that is affected by Approve/Decline events 'TitleField' => 'PackName', // field, used in bluebar when editing existing item 'TitlePresets' => Array( 'default' => Array( 'new_status_labels' => Array('lang'=>'!la_title_Adding_Language!'), 'edit_status_labels' => Array('lang'=>'!la_title_Editing_Language!'), 'new_titlefield' => Array('lang'=>'!la_title_New_Language!'), ), 'languages_list' => Array( 'prefixes' => Array('lang_List'), 'format' => "!la_title_Configuration! - !la_title_LanguagePacks! (#lang_recordcount#)"), 'languages_edit_general' => Array( 'prefixes' => Array('lang'), 'format' => "#lang_status# '#lang_titlefield#' - !la_title_General!"), 'phrases_list' => Array( 'prefixes' => Array('lang','phrases_List'), 'format' => "#lang_status# '#lang_titlefield#' - !la_title_Labels! (#phrases_recordcount#)"), 'import_language' => Array( 'prefixes' => Array('phrases.import'), 'format' => "!la_title_InstallLanguagePackStep1!"), 'import_language_step2' => Array( 'prefixes' => Array('phrases.import'), 'format' => "!la_title_InstallLanguagePackStep2!"), 'export_language' => Array( 'prefixes' => Array('phrases.export'), 'format' => "!la_title_ExportLanguagePackStep1!"), 'export_language_results' => Array( 'prefixes' => Array('phrases.export'), 'format' => "!la_title_ExportLanguagePackResults!"), 'events_list' => Array( 'prefixes' => Array('lang','emailevents_List'), 'format' => "#lang_status# '#lang_titlefield#' - !la_title_EmailEvents! (#emailevents_recordcount#)"), 'event_edit' => Array( 'prefixes' => Array('emailevents'), 'edit_status_labels' => Array('emailevents' => '!la_title_Editing_EmailEvent!'), 'format' => '#emailevents_status# - #emailevents_titlefield#'), 'email_messages_edit' => Array( 'prefixes' => Array('lang','emailmessages'), 'new_titlefield' => Array('emailmessages' => '!la_NoSubject!'), 'format' => "#lang_status# '#lang_titlefield#' - !la_title_EditingEmailEvent! '#emailmessages_titlefield#'"), ), 'TableName' => TABLE_PREFIX.'Language', 'SubItems' => Array('phrases','emailmessages'), 'FilterMenu' => Array( 'Groups' => Array( Array('mode' => 'AND', 'filters' => Array(0,1), 'type' => WHERE_FILTER), ), 'Filters' => Array( 0 => Array('label' =>'la_Enabled', 'on_sql' => '', 'off_sql' => '%1$s.Enabled != 1' ), 1 => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Enabled != 0' ), ) ), 'AutoDelete' => true, 'AutoClone' => true, 'ListSQLs' => Array( ''=>'SELECT * FROM %s', ), // key - special, value - list select sql 'ItemSQLs' => Array( ''=>'SELECT * FROM %s', ), 'ListSortings' => Array( '' => Array( 'Sorting' => Array('PackName' => 'asc'), ) ), 'Fields' => Array( 'LanguageId' => Array(), 'PackName' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'LocalName' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'Enabled' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array(0 => 'la_Disabled', 1 => 'la_Enabled'), 'use_phrases' => 1, 'not_null' => '1', 'default' => '0'), 'PrimaryLang' => Array('type' => 'int','not_null' => '1','default' => '0'), 'IconURL' => Array('type' => 'string','default' => ''), 'DateFormat' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'TimeFormat' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'DecimalPoint' => Array('type' => 'string','not_null' => '1','default' => '.'), 'ThousandSep' => Array('type' => 'string','not_null' => '1','default' => ','), 'Charset' => Array('type' => 'string','not_null' => '1','default' => '','required'=>1), 'UnitSystem' => Array('type' => 'int','not_null' => '1','default' => '1','formatter' => 'kOptionsFormatter','options' => Array(1 => 'la_Metric', 2 => 'la_US_UK'),'use_phrases' => 1), ), 'VirtualFields' => Array( 'CopyLabels' => Array('type' => 'int', 'default' => 0), 'CopyFromLanguage' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'Language ORDER BY PackName', 'option_title_field' => 'PackName', 'option_key_field' => 'LanguageId'), ), 'Grids' => Array( 'Default' => Array( 'Icons' => Array('default'=>'icon16_custom.gif','0_0'=>'icon16_language_disabled.gif','1_0'=>'icon16_language.gif','0_1'=>'icon16_language_disabled.gif','1_1'=>'icon16_language_primary.gif'), 'Fields' => Array( 'PackName' => Array( 'title'=>'la_col_PackName', 'data_block' => 'grid_checkbox_td'), 'LocalName' => Array( 'title'=>'la_col_LocalName' ), 'Enabled' => Array( 'title'=>'la_col_Status' ), ), ), ), ); ?> \ No newline at end of file Property changes on: trunk/core/units/languages/languages_config.php ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.3 \ No newline at end of property +1.4 \ No newline at end of property Index: trunk/core/units/languages/languages_tag_processor.php =================================================================== --- trunk/core/units/languages/languages_tag_processor.php (revision 1765) +++ trunk/core/units/languages/languages_tag_processor.php (revision 1766) @@ -1,61 +1,68 @@ <?php class LanguagesTagProcessor extends kDBTagProcessor { /** * Guesses what charset should be used: * 1. use lang.current_Field field="Charset" by default * 2. if using temp tables then use lang_Field field="Charset" * * @param Array $params * @return string */ function GetCharset($params) { $edit_direct = $this->Application->GetVar('phrases_label'); $top_prefix = $this->Application->GetTopmostPrefix($this->Prefix); if( $this->Application->GetVar($top_prefix.'_mode') == 't' && !$edit_direct ) { $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params); return $object->GetDBField('Charset'); } $lang_current =& $this->Application->recallObject('lang.current'); return $lang_current->GetDBField('Charset'); } function ListLanguages($params) { $this->Special = 'list'; return $this->PrintList2($params); } function SelectedLanguage($params) { $object =& $this->Application->recallObject($this->getPrefixSpecial()); return $object->GetDBField('LanguageId') == $this->Application->RecallVar('m_lang'); } /** * Returns path where exported languages should be saved * * @param unknown_type $params */ function ExportPath($params) { $admin_folder = $this->Application->ConfigValue('AdminDirectory'); if(!$admin_folder) $admin_folder = 'admin'; $ret = DOC_ROOT.BASE_PATH.'/'.$admin_folder.'/export/'; if( getArrayValue($params,'as_url') ) { $ret = str_replace( DOC_ROOT.BASE_PATH.'/', $this->Application->BaseURL(), $ret); } return $ret; } +/* function Main_IsMetricUnits($params) + { + $object =& $this->Application->recallObject($this->Prefix.'.current'); + $measure_system = $object->GetDBField('UnitSystem'); + return $measure_system == 1 ? 1 : 0; + }*/ + } ?> \ No newline at end of file Property changes on: trunk/core/units/languages/languages_tag_processor.php ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.2 \ No newline at end of property +1.3 \ No newline at end of property