Index: branches/RC/core/units/general/helpers/controls/minput_helper.php =================================================================== diff -u -N --- branches/RC/core/units/general/helpers/controls/minput_helper.php (revision 11892) +++ branches/RC/core/units/general/helpers/controls/minput_helper.php (revision 0) @@ -1,197 +0,0 @@ -Application->getUnitOption($prefix, 'TableName'); - return $temp ? $this->Application->GetTempName($table_name, 'prefix:'.$prefix) : $table_name; - } - - function prepareMInputXML($records, $use_fields) - { - $xml = ''; - foreach ($records as $record) { - $xml .= ''; - foreach ($record as $field_name => $field_value) { - if (!in_array($field_name, $use_fields)) { - continue; - } - $xml .= '' . htmlspecialchars($field_value) . ''; - } - $xml .= ''; - } - - return $xml ? ''.$xml.'' : ''; - } - - function prepareErrorsXML(&$object, $fields_hash) - { - $xml = ''; - foreach ($fields_hash as $field_name => $field_value) { - $object->SetField($field_name, $field_value); - if (!$object->ValidateField($field_name)) { - $xml .= ''.$object->GetErrorMsg($field_name, false).''; - } - } - - return ''.$xml.''; - } - - /** - * Validates MInput control fields - * - * @param kEvent $event - */ - function OnValidateMInputFields(&$event) - { - $object =& $event->getObject(); - /* @var $object kDBItem */ - - $items_info = $this->Application->GetVar($event->getPrefixSpecial(true)); - if ($items_info) { - list ($id, $field_values) = each($items_info); - - echo $this->prepareErrorsXML($object, $field_values); - } - - $event->status = erSTOP; - } - - function parseMInputXML($xml) - { - $xml_helper =& $this->Application->recallObject('kXMLHelper'); - /* @var $xml_helper kXMLHelper */ - - $root_node =& $xml_helper->Parse($xml); - $root_node =& $root_node->FindChild('records'); - if (!$root_node || !$root_node->firstChild) { - return false; - } - - $records = Array (); - $current_node = $root_node->firstChild; - /* @var $current_node kXMLNode */ - - do { - $record = Array(); - $sub_node =& $current_node->firstChild; - /* @var $current_node kXMLNode */ - - do { - $record[$sub_node->Attributes['NAME']] = $sub_node->Data; - - }while ( ($sub_node =& $sub_node->NextSibling()) ); - - $records[] = $record; - } while (($current_node =& $current_node->NextSibling())); - - return $records; - } - - /** - * Loads selected values from sub_prefix to main item virtual field. - * Called from OnAfterItemLoad of main prefix. - * - * @param kEvent $event - * @param string $store_field main item's field name, to store values into - * @param string $sub_prefix prefix used to store info about selected items - * @param Array $use_fields fields, used in value string building - */ - function LoadValues(&$event, $store_field, $sub_prefix, $use_fields) - { - $object =& $event->getObject(); - /* @var $object kDBItem */ - - $sub_item =& $this->Application->recallObject($sub_prefix, null, Array('skip_autoload' => true)); - /* @var $sub_item kDBItem */ - - $foreign_key = $this->Application->getUnitOption($sub_prefix, 'ForeignKey'); - - $sql = 'SELECT * - FROM '.$this->getTable($sub_prefix, $object->IsTempTable()).' - WHERE '.$foreign_key.' = '.$object->GetID(); - - $selected_items = $this->Conn->Query($sql); - - $field_names = array_keys( $sub_item->GetFieldValues() ); - - foreach ($selected_items as $key => $fields_hash) { - $sub_item->Clear(); - $sub_item->SetDBFieldsFromHash($fields_hash); - - // to fill *_date and *_time fields from main date fields - $sub_item->UpdateFormattersSubFields(); - - foreach ($field_names as $field) { - $field_options = $sub_item->GetFieldOptions($field); - $formatter = array_key_exists('formatter', $field_options) ? $field_options['formatter'] : false; - - if ($formatter == 'kDateFormatter') { - $selected_items[$key][$field] = $sub_item->GetField($field, $field_options['input_format']); - } - else { - $selected_items[$key][$field] = $sub_item->GetDBField($field); - } - } - } - - $object->SetDBField($store_field, $this->prepareMInputXML($selected_items, $use_fields)); - } - - /** - * Saves data from minput control to subitem table (used from subitem hook) - * - * @param kEvent $sub_event - * @param string $store_field - */ - function SaveValues(&$sub_event, $store_field) - { - $main_object =& $sub_event->MasterEvent->getObject(); - $affected_field = $main_object->GetDBField($store_field); - - $object =& $this->Application->recallObject($sub_event->getPrefixSpecial(), null, Array('skip_autoload' => true)); - /*@var $object kDBItem*/ - - $sub_table = $object->TableName; - $foreign_key = $this->Application->getUnitOption($sub_event->Prefix, 'ForeignKey'); - - $sql = 'DELETE FROM '.$sub_table.' - WHERE '.$foreign_key.' = '.$main_object->GetID(); - - $this->Conn->Query($sql); - - if ($affected_field) { - $records = $this->parseMInputXML($affected_field); - $main_id = $main_object->GetID(); - - foreach ($records as $fields_hash) { - $object->Clear(); - $fields_hash[$foreign_key] = $main_id; - $object->SetDBFieldsFromHash($fields_hash); - $object->Create(); - } - } - } - } - -?> \ No newline at end of file